Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
ホスト host
にポート port
で接続します。
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
指定されたパスにある名前付きパイプ / UNIX ドメインソケットに接続します。
Unix ではパスの長さは92バイトから108バイトの間に制限されています(cf. man unix
)。
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
指定されたアドレス addr
のポートでリッスンします。デフォルトでは、これは localhost
のみでリッスンします。すべてのインターフェースでリッスンするには、適切に IPv4(0)
または IPv6(0)
を渡します。backlog
は、サーバーが接続を拒否し始める前に、保留中の接続(accept
を呼び出していない)をどれだけ許可するかを決定します。backlog
のデフォルト値は 511 です。
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
名前付きパイプ / UNIX ドメインソケットを作成してリッスンします。
Unix ではパスの長さは92バイトから108バイトの間に制限されています(cf. man unix
)。
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
指定された IPAddr
タイプの host
の最初の IP アドレスを取得します。オペレーティングシステムの基盤となる getaddrinfo 実装を使用し、DNS ルックアップを行う場合があります。
例
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
host
の最初の利用可能なIPアドレスを取得します。これはIPv4
またはIPv6
アドレスのいずれかである可能性があります。オペレーティングシステムの基盤となるgetaddrinfo実装を使用し、DNSルックアップを行う場合があります。
Sockets.getipaddr
— Functiongetipaddr() -> IPAddr
ローカルマシンのIPアドレスを取得し、IPv4をIPv6よりも優先します。利用可能なアドレスがない場合は例外をスローします。
getipaddr(addr_type::Type{T}) where T<:IPAddr -> T
指定されたタイプのローカルマシンのIPアドレスを取得します。指定されたタイプのアドレスが利用できない場合は例外をスローします。
この関数はgetipaddrs
の後方互換性ラッパーです。新しいアプリケーションは代わりにgetipaddrs
を使用するべきです。
例
julia> getipaddr()
ip"192.168.1.28"
julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"
さらにgetipaddrs
を参照してください。
Sockets.getipaddrs
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
ローカルマシンのIPアドレスを取得します。
オプションのaddr_type
パラメータをIPv4
またはIPv6
に設定すると、そのタイプのアドレスのみが返されます。
loopback
キーワード引数は、ループバックアドレス(例:ip"127.0.0.1"
、ip"::1"
)が含まれるかどうかを決定します。
この関数はJulia 1.2以降で利用可能です。
例
julia> getipaddrs()
5-element Array{IPAddr,1}:
ip"198.51.100.17"
ip"203.0.113.2"
ip"2001:db8:8:4:445e:5fff:fe5d:5500"
ip"2001:db8:8:4:c164:402e:7e3c:3668"
ip"fe80::445e:5fff:fe5d:5500"
julia> getipaddrs(IPv6)
3-element Array{IPv6,1}:
ip"2001:db8:8:4:445e:5fff:fe5d:5500"
ip"2001:db8:8:4:c164:402e:7e3c:3668"
ip"fe80::445e:5fff:fe5d:5500"
関連情報はislinklocaladdr
を参照してください。
Sockets.islinklocaladdr
— Functionislinklocaladdr(addr::IPAddr)
IPアドレスがリンクローカルアドレスであるかどうかをテストします。リンクローカルアドレスは、そのネットワークセグメントを超えて一意であることが保証されていないため、ルーターはそれらを転送しません。リンクローカルアドレスは、アドレスブロック 169.254.0.0/16
または fe80::/10
からのものです。
例
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
host
のすべてのIPアドレスを取得します。オペレーティングシステムの基盤となるgetaddrinfo
実装を使用し、DNSルックアップを行う場合があります。
例
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
DNS ルックアップ中にエラーが発生したときにスローされる例外のタイプです。host
フィールドはホストの URL 文字列を示します。code
フィールドは libuv に基づくエラーコードを示します。
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
IPアドレスの逆引きを行い、オペレーティングシステムの基盤となる getnameinfo
実装を使用してホスト名とサービスを返します。
例
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
指定されたソケットがバインドされているIPアドレスとポートを取得します。
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
指定されたソケットが接続されているリモートエンドポイントのIPアドレスとポートを取得します。接続されたTCPソケットに対してのみ有効です。
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
IPアドレスhost
をInteger
形式で受け取り、IPv4オブジェクトを返します。
例
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
IPv4アドレス文字列をIPv4
オブジェクトに解析します。
例
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(host::Integer) -> IPv6
IPアドレス host
を Integer
形式でフォーマットされたIPv6オブジェクトを返します。
例
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
IPv6アドレス文字列をIPv6
オブジェクトに解析します。
例
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@ip_str str -> IPAddr
str
をIPアドレスとして解析します。
例
julia> ip"127.0.0.1"
ip"127.0.0.1"
julia> @ip_str "2001:db8:0:0:0:0:2:1"
ip"2001:db8::2:1"
Sockets.TCPSocket
— TypeTCPSocket(; delay=true)
libuvを使用してTCPソケットを開きます。delay
がtrueの場合、libuvは最初のbind
呼び出しまでソケットのファイルディスクリプタの作成を遅延させます。TCPSocket
には、ソケットの状態や送受信バッファを示すさまざまなフィールドがあります。
Sockets.UDPSocket
— TypeUDPSocket()
libuvを使用してUDPソケットを開きます。UDPSocket
にはソケットの状態を示すさまざまなフィールドがあります。
Sockets.accept
— Functionaccept(server[, client])
指定されたサーバーで接続を受け入れ、クライアントへの接続を返します。初期化されていないクライアントストリームが提供される場合、それが新しいストリームを作成する代わりに使用されます。
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
任意のポートで TCPServer
を作成し、ヒントを出発点として使用します。サーバーが作成された実際のポートとサーバー自体のタプルを返します。backlog 引数は、sockfd の保留中の接続のキューが成長できる最大長を定義します。
Base.bind
— Functionbind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)
socket
を指定されたhost:port
にバインドします。0.0.0.0
はすべてのデバイスでリッスンします。
ipv6only
パラメータはデュアルスタックモードを無効にします。ipv6only=true
の場合、IPv6スタックのみが作成されます。reuseaddr=true
の場合、複数のスレッドまたはプロセスが同じアドレスにバインドできますが、すべてがreuseaddr=true
を設定している必要があります。ただし、最後にバインドしたものだけがトラフィックを受信します。
bind(chnl::Channel, task::Task)
chnl
のライフタイムをタスクに関連付けます。タスクが終了すると、Channel
chnl
は自動的に閉じられます。タスク内で捕捉されない例外は、chnl
のすべての待機者に伝播されます。
chnl
オブジェクトは、タスクの終了に関係なく明示的に閉じることができます。終了したタスクは、すでに閉じられたChannel
オブジェクトには影響を与えません。
チャネルが複数のタスクにバインドされている場合、最初に終了したタスクがチャネルを閉じます。複数のチャネルが同じタスクにバインドされている場合、タスクの終了はすべてのバインドされたチャネルを閉じます。
例
julia> c = Channel(0);
julia> task = @async foreach(i->put!(c, i), 1:4);
julia> bind(c,task);
julia> for i in c
@show i
end;
i = 1
i = 2
i = 3
i = 4
julia> isopen(c)
false
julia> c = Channel(0);
julia> task = @async (put!(c, 1); error("foo"));
julia> bind(c, task);
julia> take!(c)
1
julia> put!(c, 1);
ERROR: TaskFailedException
Stacktrace:
[...]
nested task error: foo
[...]
Sockets.send
— Functionsend(socket::UDPSocket, host::IPAddr, port::Integer, msg)
sock
を介してhost:port
にmsg
を送信します。
Sockets.recv
— Functionrecv(socket::UDPSocket)
指定されたソケットからUDPパケットを読み取り、受信したバイトを返します。この呼び出しはブロックします。
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
指定されたソケットからUDPパケットを読み取り、(host_port, data)
のタプルを返します。ここで、host_port
は適切にInetAddr{IPv4}
またはInetAddr{IPv6}
になります。
Juliaバージョン1.3以前では、最初に返される値はアドレス(IPAddr
)でした。バージョン1.3ではInetAddr
に変更されました。
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
UDPソケットオプションを設定します。
multicast_loop
: マルチキャストパケットのループバック(デフォルト:true
)。multicast_ttl
: マルチキャストパケットのTTL(デフォルト:nothing
)。enable_broadcast
: ソケットがブロードキャストメッセージに使用される場合はフラグをtrue
に設定する必要があります。そうしないと、UDPシステムはアクセスエラーを返します(デフォルト:false
)。ttl
: ソケットで送信されるパケットの生存時間(デフォルト:nothing
)。
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
ネイグルのアルゴリズムは、複数の小さなTCPパケットを大きなパケットにバッチ処理します。これによりスループットが向上する可能性がありますが、レイテンシが悪化することがあります。ネイグルのアルゴリズムはデフォルトで有効になっています。この関数は、特定のTCPサーバーまたはソケットでネイグルのアルゴリズムがアクティブかどうかを設定します。反対のオプションは、他の言語ではTCP_NODELAY
と呼ばれます。
この関数はJulia 1.3以降が必要です。
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Linuxシステムでは、TCP_QUICKACKはsocket
で無効または有効になります。