Sockets
Sockets.Sockets
── モジュール
Sockets.connect
── メソッド
Sockets.connect
── メソッド
Sockets.listen
── メソッド
Sockets.listen
── メソッド
Sockets.getaddrinfo
── 関数
getaddrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr
host
の一つ目の IP アドレスを指定した IPAddr
型で取得します。オペレーティングシステムが提供する getaddrinfo
実装を使うので、DNS ルックアップが起こる可能性があります。
Sockets.getipaddr
── 関数
getipaddr() -> IPAddr
ローカルマシンの IP アドレスを一つ取得します。IPv6 より IPv4 を優先します。アドレスが一つも利用可能でなければ例外が送出されます。
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
── 関数
getipaddrs(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
, split(ENV["SSH_CONNECTION"], ' ')[3]
も参照してください。
Sockets.islinklocaladdr
── 関数
islinklocaladdr(addr::IPAddr)
IP アドレス addr
がリンクローカルアドレスかどうかを判定します。リンクローカルアドレスはネットワークセグメントをまたいで一意であることが保証されておらず、そのためルーターはフォワードを行いません。リンクローカルアドレスはアドレスブロック 169.254.0.0/16
または fe80::/10
に含まれます。
例
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
── 関数
getalladdrinfo(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
── 型
DNSError
DNS ルックアップでエラーが発生したときに送出される例外の型です。host
フィールドがホスト URL を表す文字列であり、code
フィールドが libuv におけるエラーコードです。
Sockets.getnameinfo
── 関数
getnameinfo(host::IPAddr) -> String
IP アドレスの逆引きを行ってホスト名とサービスを返します。オペレーティングシステムが提供する getnameinfo
の実装が使われます。
例
julia> getnameinfo(Sockets.IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
── 関数
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
与えられたソケットがバインドされている IP アドレスとポートを取得します。
Sockets.getpeername
── 関数
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)
与えられたソケットが接続しているリモートエンドポイントの IP アドレスとポートを取得します。接続された TCP ソケットに対してだけ値を返します。
Sockets.IPAddr
── 型
Sockets.IPv4
── 型
Sockets.IPv6
── 型
Sockets.@ip_str
── マクロ
@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
── 型
Sockets.UDPSocket
── 型
Sockets.accept
── 関数
accept(server[, client])
与えられたサーバーで接続を受け付け、クライアントへの接続を返します。未初期化のクライアントストリームを与えることもでき、その場合は新しいストリームを作成せずに与えたストリームを更新して返します。
Sockets.listenany
── 関数
listenany([host::IPAddr,] port_hint) -> (UInt16, TCPServer)
TCPServer
を任意のポートで作成します。port_hint
は最初に試すポートを表すヒントです。サーバーが実際に作成されたポートとサーバー自身からなるタプルを返します。
Base.bind
── 関数
bind(chnl::Channel, task::Task)
chnl
の寿命を task
に関連付けます。Channel
型の値 chnl
は task
が終了すると自動的に閉じられるようになります。task
内の未捕捉の例外は chnl
を wait
する全てのタスクに伝播します。
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:
foo
Stacktrace:
[...]
bind(socket::Union{UDPSocket, TCPSocket},
host::IPAddr,
port::Integer; ipv6only=false,
reuseaddr=false,
kws...)
socket
を与えられた host:port
にバインドします。0.0.0.0
とすると全てのデバイスにリッスンします。
ipv6only = true
だとデュアルスタックモードが無効になり、IPv6 スタックだけが作成されます。reuseaddr=true
だと、複数のスレッドまたはプロセスがreuseaddr=true
として同じアドレスをバインドしたときにエラーが起こらなくなります。ただしトラフィックを受け取るのは最後にバインドしたスレッド/プロセスだけです。
Sockets.send
── 関数
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)
socket
を通じて msg
を host:port
に送信します。
Sockets.recv
── 関数
Sockets.recvfrom
── 関数
recvfrom(socket::UDPSocket) -> (host_port, data)
指定されたソケットから UDP パケットを読み、タプル (host_port, data)
を返します。ここで host_port
は InetAddr{IPv4}
または InetAddr{IPv6}
から適切な方が選ばれます。
Julia 1.3 より前のバージョンでは一つ目の返り値がアドレス (IPAddr
) でしたが、Julia 1.3 で InetAddr
に変更されました。
Sockets.setopt
── 関数
setopt(sock::UDPSocket;
multicast_loop=nothing,
multicast_ttl=nothing,
enable_broadcast=nothing,
ttl=nothing)
UDP ソケットのオプションを設定します。
multicast_loop
: マルチキャストパケットのループバック。multicast_ttl
: マルチキャストパケットの TTL。enable_broadcast
: ブロードキャストメッセージに使われるソケットでtrue
に設定する必要があるフラグ。設定しないと UDP システムでアクセスエラーが発生する。ttl
: ソケットに送られるパケットの TTL。
Sockets.nagle
── 関数
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
与えられた TCP サーバーもしくはソケットで Nagle アルゴリズムを有効化または無効化します。
Sockets.quickack
── 関数
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
socket
に対する TCP_QUICKACK
を有効化または無効化します。このオプションは Linux システムにのみ存在します。