Sockets

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

連線到埠號為 port 的主機 host

Sockets.connect方法
connect(path::AbstractString) -> PipeEndpoint

連線到位於 path 的命名管線/UNIX 域 socket。

注意

Unix 上的路徑長度限制在 92 至 108 位元組之間(請參閱 man unix)。

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

addr 指定的位址上監聽埠。預設只會在 localhost 上監聽。若要監聽所有介面,請適當地傳遞 IPv4(0)IPv6(0)backlog 決定在伺服器開始拒絕連線之前,可以有多少連線處於待處理狀態(尚未呼叫 accept)。backlog 的預設值為 511。

Sockets.listen方法
listen(path::AbstractString) -> PipeServer

建立並監聽命名管線 / UNIX 域端點。

注意

Unix 上的路徑長度限制在 92 至 108 位元組之間(請參閱 man unix)。

Sockets.getaddrinfo函式
getaddrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr

取得指定 IPAddr 類型的 host 的第一個 IP 位址。使用作業系統底層的 getaddrinfo 實作,可能會執行 DNS 查詢。

Sockets.getipaddr函式
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

Sockets.getipaddrs函式
getipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}

取得本機的 IP 位址。

將選用的 addr_type 參數設定為 IPv4IPv6,只會傳回該類型的位址。

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

Sockets.islinklocaladdr函式
islinklocaladdr(addr::IPAddr)

測試 IP 位址是否為連結本地位址。連結本地位址並非保證在網路區段之外是唯一的,因此路由器不會轉送它們。連結本地位址來自位址區塊 169.254.0.0/16fe80::/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(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname函式
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)

取得給定 socket 繫結的 IP 位址和埠號。

Sockets.getpeername函式
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)

取得給定 socket 連線的遠端端點的 IP 位址和埠號。僅對已連線的 TCP socket 有效。

Sockets.IPv4類型
IPv4(host::Integer) -> IPv4

從格式化為 整數 的 IP 位址 host 傳回 IPv4 物件。

範例

julia> IPv4(3223256218)
ip"192.30.252.154"
Sockets.IPv6類型
IPv6(host::Integer) -> IPv6

從格式化為 整數 的 IP 位址 host 傳回 IPv6 物件。

範例

julia> IPv6(3223256218)
ip"::c01e:fc9a"
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類型
TCPSocket(; delay=true)

使用 libuv 開啟 TCP socket。如果 delay 為 true,libuv 會延遲建立 socket 的檔案描述子,直到第一次 bind 呼叫為止。 TCPSocket 有多個欄位表示 socket 的狀態以及其傳送/接收緩衝區。

Sockets.UDPSocket類型
UDPSocket()

使用 libuv 開啟 UDP socket。 UDPSocket 有多個欄位表示 socket 的狀態。

Sockets.accept函式
accept(server[, client])

在指定的伺服器上接受連線,並傳回與用戶端的連線。可以提供未初始化的用戶端串流,如此一來,它會用於建立新的串流,而不是使用舊的串流。

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

在任何埠上建立 TCPServer,使用提示作為起點。傳回伺服器建立所在的實際埠和伺服器本身。backlog 參數定義 sockfd 的待處理連線佇列可以增加到的最大長度。

Base.bind函數
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,但只有最後繫結的執行緒或程序會收到任何流量。
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函數
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)

透過 socketmsg 傳送至 host:port

Sockets.recv函數
recv(socket::UDPSocket)

從指定的 socket 讀取一個 UDP 封包,並傳回收到的位元組。此呼叫會封鎖。

Sockets.recvfrom函數
recvfrom(socket::UDPSocket) -> (host_port, data)

從指定的 socket 讀取一個 UDP 封包,傳回 (host_port, data) 的元組,其中 host_port 會是 InetAddr{IPv4} 或 InetAddr{IPv6},視情況而定。

Julia 1.3

在 Julia 1.3 版本之前,第一個回傳值是位址 (IPAddr)。在 1.3 版本中,它已變更為 InetAddr

Sockets.setopt函數
setopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)

設定 UDP socket 選項。

  • multicast_loop:多播封包的回送 (預設值:true)。
  • multicast_ttl:多播封包的 TTL (預設值:nothing)。
  • enable_broadcast:如果 socket 將用於廣播訊息,則必須將旗標設定為 true,否則 UDP 系統將回傳存取錯誤 (預設值:false)。
  • ttl:在 socket 上傳送封包的存活時間 (預設值:nothing)。
Sockets.nagle函數
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)

在指定的 TCP 伺服器或 socket 上啟用或停用 Nagle 演算法。

Julia 1.3

此函數需要 Julia 1.3 或更新版本。

Sockets.quickack函數
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)

在 Linux 系統上,TCP_QUICKACK 在 socket 上停用或啟用。