Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
Verbinde mit dem Host host
über den Port port
.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
Verbinden Sie mit dem benannten Pipe / UNIX-Domain-Socket unter path
.
Die Pfadlänge unter Unix ist auf irgendwo zwischen 92 und 108 Bytes begrenzt (vgl. man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Hören Sie auf dem Port an der durch addr
angegebenen Adresse. Standardmäßig hört dies nur auf localhost
. Um auf allen Schnittstellen zu hören, übergeben Sie IPv4(0)
oder IPv6(0)
je nach Bedarf. backlog
bestimmt, wie viele Verbindungen ausstehend sein können (die accept
nicht aufgerufen haben), bevor der Server beginnt, sie abzulehnen. Der Standardwert von backlog
beträgt 511.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
Erstellen und auf einem benannten Pipe / UNIX-Domain-Socket hören.
Die Pfadlänge unter Unix ist auf irgendwo zwischen 92 und 108 Bytes begrenzt (vgl. man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
Erhält die erste IP-Adresse des host
des angegebenen IPAddr
-Typs. Verwendet die zugrunde liegende Implementierung von getaddrinfo des Betriebssystems, die möglicherweise eine DNS-Abfrage durchführt.
Beispiele
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
Erhält die erste verfügbare IP-Adresse von host
, die entweder eine IPv4
- oder IPv6
-Adresse sein kann. Verwendet die zugrunde liegende getaddrinfo-Implementierung des Betriebssystems, die möglicherweise eine DNS-Abfrage durchführt.
Sockets.getipaddr
— Functiongetipaddr() -> IPAddr
Holen Sie sich eine IP-Adresse des lokalen Rechners, wobei IPv4 gegenüber IPv6 bevorzugt wird. Wirft eine Ausnahme, wenn keine Adressen verfügbar sind.
getipaddr(addr_type::Type{T}) where T<:IPAddr -> T
Holen Sie sich eine IP-Adresse des lokalen Rechners des angegebenen Typs. Wirft eine Ausnahme, wenn keine Adressen des angegebenen Typs verfügbar sind.
Diese Funktion ist ein Rückwärtskompatibilitäts-Wrapper um getipaddrs
. Neue Anwendungen sollten stattdessen getipaddrs
verwenden.
Beispiele
julia> getipaddr()
ip"192.168.1.28"
julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"
Siehe auch getipaddrs
.
Sockets.getipaddrs
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
Holen Sie sich die IP-Adressen des lokalen Computers.
Wenn der optionale Parameter addr_type
auf IPv4
oder IPv6
gesetzt wird, werden nur Adressen dieses Typs zurückgegeben.
Das Schlüsselwortargument loopback
bestimmt, ob Loopback-Adressen (z. B. ip"127.0.0.1"
, ip"::1"
) einbezogen werden.
Diese Funktion ist seit Julia 1.2 verfügbar.
Beispiele
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"
Siehe auch islinklocaladdr
.
Sockets.islinklocaladdr
— Functionislinklocaladdr(addr::IPAddr)
Überprüft, ob eine IP-Adresse eine Link- lokale Adresse ist. Link-lokale Adressen sind nicht garantiert, über ihr Netzwerksegment hinaus einzigartig zu sein, daher leiten Router sie nicht weiter. Link-lokale Adressen stammen aus den Adressblöcken 169.254.0.0/16
oder fe80::/10
.
Beispiele
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
Erhält alle IP-Adressen des host
. Verwendet die zugrunde liegende getaddrinfo
-Implementierung des Betriebssystems, die möglicherweise eine DNS-Abfrage durchführt.
Beispiele
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
Der Typ der Ausnahme, die ausgelöst wird, wenn ein Fehler bei der DNS-Abfrage auftritt. Das Feld host
gibt die Host-URL-Zeichenfolge an. Das Feld code
gibt den Fehlercode basierend auf libuv an.
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
Führt eine Rückwärtssuche für die IP-Adresse durch, um einen Hostnamen und einen Dienst unter Verwendung der zugrunde liegenden getnameinfo
-Implementierung des Betriebssystems zurückzugeben.
Beispiele
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Holen Sie sich die IP-Adresse und den Port, an den der gegebene Socket gebunden ist.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Holen Sie sich die IP-Adresse und den Port des Remote-Endpunkts, mit dem der gegebene Socket verbunden ist. Gültig nur für verbundene TCP-Sockets.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
Gibt ein IPv4-Objekt von der IP-Adresse host
zurück, die als Integer
formatiert ist.
Beispiele
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
Analysiere einen IPv4-Adressstring in ein IPv4
-Objekt.
Beispiele
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(host::Integer) -> IPv6
Gibt ein IPv6-Objekt von der IP-Adresse host
zurück, die als Integer
formatiert ist.
Beispiele
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
Analysiere einen IPv6-Adressen-String in ein IPv6
-Objekt.
Beispiele
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@ip_str str -> IPAddr
Analysiere str
als eine IP-Adresse.
Beispiele
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)
Öffnen Sie einen TCP-Socket mit libuv. Wenn delay
wahr ist, verzögert libuv die Erstellung des Dateideskriptors des Sockets bis zum ersten bind
Aufruf. TCPSocket
hat verschiedene Felder, um den Zustand des Sockets sowie seine Sende-/Empfangspuffer anzuzeigen.
Sockets.UDPSocket
— TypeUDPSocket()
Öffnen Sie einen UDP-Socket mit libuv. UDPSocket
hat verschiedene Felder, um den Zustand des Sockets anzuzeigen.
Sockets.accept
— Functionaccept(server[, client])
Akzeptiert eine Verbindung auf dem angegebenen Server und gibt eine Verbindung zum Client zurück. Ein nicht initialisierter Client-Stream kann bereitgestellt werden, in diesem Fall wird er anstelle der Erstellung eines neuen Streams verwendet.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Erstellt einen TCPServer
auf einem beliebigen Port, wobei der Hinweis als Ausgangspunkt verwendet wird. Gibt ein Tupel des tatsächlichen Ports zurück, auf dem der Server erstellt wurde, und den Server selbst. Das Argument backlog definiert die maximale Länge, die die Warteschlange ausstehender Verbindungen für sockfd erreichen kann.
Base.bind
— Functionbind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)
Binde socket
an den angegebenen host:port
. Beachten Sie, dass 0.0.0.0
auf allen Geräten lauscht.
- Der Parameter
ipv6only
deaktiviert den Dual-Stack-Modus. Wennipv6only=true
, wird nur ein IPv6-Stack erstellt. - Wenn
reuseaddr=true
, können mehrere Threads oder Prozesse an dieselbe Adresse binden, ohne einen Fehler zu verursachen, wenn sie allereuseaddr=true
setzen, aber nur der letzte, der bindet, erhält den gesamten Verkehr.
bind(chnl::Channel, task::Task)
Assoziiere die Lebensdauer von chnl
mit einer Aufgabe. Channel
chnl
wird automatisch geschlossen, wenn die Aufgabe endet. Jede nicht abgefangene Ausnahme in der Aufgabe wird an alle Wartenden auf chnl
weitergegeben.
Das chnl
-Objekt kann unabhängig vom Abschluss der Aufgabe explizit geschlossen werden. Beendete Aufgaben haben keinen Einfluss auf bereits geschlossene Channel
-Objekte.
Wenn ein Kanal an mehrere Aufgaben gebunden ist, wird der erste, der beendet wird, den Kanal schließen. Wenn mehrere Kanäle an dieselbe Aufgabe gebunden sind, wird das Beenden der Aufgabe alle gebundenen Kanäle schließen.
Beispiele
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)
Sende msg
über socket
an host:port
.
Sockets.recv
— Functionrecv(socket::UDPSocket)
Liest ein UDP-Paket vom angegebenen Socket und gibt die empfangenen Bytes zurück. Dieser Aufruf blockiert.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
Lese ein UDP-Paket vom angegebenen Socket und gebe ein Tupel von (host_port, data)
zurück, wobei host_port
eine InetAddr{IPv4} oder InetAddr{IPv6} sein wird, je nach Bedarf.
Vor Julia-Version 1.3 war der erste zurückgegebene Wert eine Adresse (IPAddr
). In Version 1.3 wurde er in eine InetAddr
geändert.
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
Setzen Sie die UDP-Socket-Optionen.
multicast_loop
: Loopback für Multicast-Pakete (Standard:true
).multicast_ttl
: TTL für Multicast-Pakete (Standard:nothing
).enable_broadcast
: Flag muss auftrue
gesetzt werden, wenn der Socket für Broadcast-Nachrichten verwendet wird, andernfalls gibt das UDP-System einen Zugriffsfehler zurück (Standard:false
).ttl
: Time-to-live von Paketen, die über den Socket gesendet werden (Standard:nothing
).
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Nagels Algorithmus bündelt mehrere kleine TCP-Pakete zu größeren. Dies kann den Durchsatz verbessern, aber die Latenz verschlechtern. Nagels Algorithmus ist standardmäßig aktiviert. Diese Funktion legt fest, ob Nagels Algorithmus auf einem bestimmten TCP-Server oder Socket aktiv ist. Die entgegengesetzte Option wird in anderen Sprachen TCP_NODELAY
genannt.
Diese Funktion erfordert Julia 1.3 oder höher.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Auf Linux-Systemen ist TCP_QUICKACK auf socket
deaktiviert oder aktiviert.