Sockets

Sockets.connectMethod
connect([host], port::Integer) -> TCPSocket

ホスト host にポート port で接続します。

source
Sockets.connectMethod
connect(path::AbstractString) -> PipeEndpoint

指定されたパスにある名前付きパイプ / UNIX ドメインソケットに接続します。

Note

Unix ではパスの長さは92バイトから108バイトの間に制限されています(cf. man unix)。

source
Sockets.listenMethod
listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer

指定されたアドレス addr のポートでリッスンします。デフォルトでは、これは localhost のみでリッスンします。すべてのインターフェースでリッスンするには、適切に IPv4(0) または IPv6(0) を渡します。backlog は、サーバーが接続を拒否し始める前に、保留中の接続(accept を呼び出していない)をどれだけ許可するかを決定します。backlog のデフォルト値は 511 です。

source
Sockets.listenMethod
listen(path::AbstractString) -> PipeServer

名前付きパイプ / UNIX ドメインソケットを作成してリッスンします。

Note

Unix ではパスの長さは92バイトから108バイトの間に制限されています(cf. man unix)。

source
Sockets.getaddrinfoFunction
getaddrinfo(host::AbstractString, IPAddr) -> IPAddr

指定された IPAddr タイプの host の最初の IP アドレスを取得します。オペレーティングシステムの基盤となる getaddrinfo 実装を使用し、DNS ルックアップを行う場合があります。

julia> getaddrinfo("localhost", IPv6)
ip"::1"

julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
source
getaddrinfo(host::AbstractString) -> IPAddr

hostの最初の利用可能なIPアドレスを取得します。これはIPv4またはIPv6アドレスのいずれかである可能性があります。オペレーティングシステムの基盤となるgetaddrinfo実装を使用し、DNSルックアップを行う場合があります。

source
Sockets.getipaddrFunction
getipaddr() -> 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を参照してください。

source
Sockets.getipaddrsFunction
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 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を参照してください。

source
Sockets.islinklocaladdrFunction
islinklocaladdr(addr::IPAddr)

IPアドレスがリンクローカルアドレスであるかどうかをテストします。リンクローカルアドレスは、そのネットワークセグメントを超えて一意であることが保証されていないため、ルーターはそれらを転送しません。リンクローカルアドレスは、アドレスブロック 169.254.0.0/16 または fe80::/10 からのものです。

filter(!islinklocaladdr, getipaddrs())
source
Sockets.getalladdrinfoFunction
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"
source
Sockets.DNSErrorType
DNSError

DNS ルックアップ中にエラーが発生したときにスローされる例外のタイプです。host フィールドはホストの URL 文字列を示します。code フィールドは libuv に基づくエラーコードを示します。

source
Sockets.getnameinfoFunction
getnameinfo(host::IPAddr) -> String

IPアドレスの逆引きを行い、オペレーティングシステムの基盤となる getnameinfo 実装を使用してホスト名とサービスを返します。

julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
source
Sockets.getsocknameFunction
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)

指定されたソケットがバインドされているIPアドレスとポートを取得します。

source
Sockets.getpeernameFunction
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)

指定されたソケットが接続されているリモートエンドポイントのIPアドレスとポートを取得します。接続されたTCPソケットに対してのみ有効です。

source
Sockets.IPv4Type
IPv4(host::Integer) -> IPv4

IPアドレスhostInteger形式で受け取り、IPv4オブジェクトを返します。

julia> IPv4(3223256218)
ip"192.30.252.154"
source
IPv4(str::AbstractString) -> IPv4

IPv4アドレス文字列をIPv4オブジェクトに解析します。

julia> IPv4("127.0.0.1")
ip"127.0.0.1"
source
Sockets.IPv6Type
IPv6(host::Integer) -> IPv6

IPアドレス hostInteger 形式でフォーマットされたIPv6オブジェクトを返します。

julia> IPv6(3223256218)
ip"::c01e:fc9a"
source
IPv6(str::AbstractString) -> IPv6

IPv6アドレス文字列をIPv6オブジェクトに解析します。

julia> IPv6("::1")
ip"::1"
source
Sockets.@ip_strMacro
@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"
source
Sockets.TCPSocketType
TCPSocket(; delay=true)

libuvを使用してTCPソケットを開きます。delayがtrueの場合、libuvは最初のbind呼び出しまでソケットのファイルディスクリプタの作成を遅延させます。TCPSocketには、ソケットの状態や送受信バッファを示すさまざまなフィールドがあります。

source
Sockets.UDPSocketType
UDPSocket()

libuvを使用してUDPソケットを開きます。UDPSocketにはソケットの状態を示すさまざまなフィールドがあります。

source
Sockets.acceptFunction
accept(server[, client])

指定されたサーバーで接続を受け入れ、クライアントへの接続を返します。初期化されていないクライアントストリームが提供される場合、それが新しいストリームを作成する代わりに使用されます。

source
Sockets.listenanyFunction
listenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)

任意のポートで TCPServer を作成し、ヒントを出発点として使用します。サーバーが作成された実際のポートとサーバー自体のタプルを返します。backlog 引数は、sockfd の保留中の接続のキューが成長できる最大長を定義します。

source
Base.bindFunction
bind(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を設定している必要があります。ただし、最後にバインドしたものだけがトラフィックを受信します。
source
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
[...]
source
Sockets.sendFunction
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)

sockを介してhost:portmsgを送信します。

source
Sockets.recvFunction
recv(socket::UDPSocket)

指定されたソケットからUDPパケットを読み取り、受信したバイトを返します。この呼び出しはブロックします。

source
Sockets.recvfromFunction
recvfrom(socket::UDPSocket) -> (host_port, data)

指定されたソケットからUDPパケットを読み取り、(host_port, data)のタプルを返します。ここで、host_portは適切にInetAddr{IPv4}またはInetAddr{IPv6}になります。

Julia 1.3

Juliaバージョン1.3以前では、最初に返される値はアドレス(IPAddr)でした。バージョン1.3ではInetAddrに変更されました。

source
Sockets.setoptFunction
setopt(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)。
source
Sockets.nagleFunction
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)

ネイグルのアルゴリズムは、複数の小さなTCPパケットを大きなパケットにバッチ処理します。これによりスループットが向上する可能性がありますが、レイテンシが悪化することがあります。ネイグルのアルゴリズムはデフォルトで有効になっています。この関数は、特定のTCPサーバーまたはソケットでネイグルのアルゴリズムがアクティブかどうかを設定します。反対のオプションは、他の言語ではTCP_NODELAYと呼ばれます。

Julia 1.3

この関数はJulia 1.3以降が必要です。

source
Sockets.quickackFunction
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)

Linuxシステムでは、TCP_QUICKACKはsocketで無効または有効になります。

source