Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([hôte], port::Integer) -> TCPSocket
Connectez-vous à l'hôte hôte
sur le port port
.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
Se connecter au pipe nommé / socket de domaine UNIX à path
.
La longueur du chemin sur Unix est limitée à quelque part entre 92 et 108 octets (cf. man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Écoute sur le port à l'adresse spécifiée par addr
. Par défaut, cela écoute uniquement sur localhost
. Pour écouter sur toutes les interfaces, passez IPv4(0)
ou IPv6(0)
selon le cas. backlog
détermine combien de connexions peuvent être en attente (n'ayant pas appelé accept
) avant que le serveur ne commence à les rejeter. La valeur par défaut de backlog
est 511.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
Créer et écouter sur un pipe nommé / socket de domaine UNIX.
La longueur du chemin sur Unix est limitée à quelque part entre 92 et 108 octets (cf. man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
Obtient la première adresse IP de l'hôte
du type IPAddr
spécifié. Utilise l'implémentation getaddrinfo sous-jacente du système d'exploitation, qui peut effectuer une recherche DNS.
Exemples
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
Obtient la première adresse IP disponible de host
, qui peut être soit une adresse IPv4
soit une adresse IPv6
. Utilise l'implémentation getaddrinfo sous-jacente du système d'exploitation, qui peut effectuer une recherche DNS.
Sockets.getipaddr
— Functiongetipaddr() -> IPAddr
Obtenez une adresse IP de la machine locale, en préférant IPv4 à IPv6. Lève une exception si aucune adresse n'est disponible.
getipaddr(addr_type::Type{T}) where T<:IPAddr -> T
Obtenez une adresse IP de la machine locale du type spécifié. Lève une exception si aucune adresse du type spécifié n'est disponible.
Cette fonction est un wrapper de compatibilité ascendante autour de getipaddrs
. Les nouvelles applications devraient utiliser getipaddrs
à la place.
Exemples
julia> getipaddr()
ip"192.168.1.28"
julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"
Voir aussi getipaddrs
.
Sockets.getipaddrs
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
Obtenez les adresses IP de la machine locale.
Définir le paramètre optionnel addr_type
sur IPv4
ou IPv6
entraîne le retour uniquement des adresses de ce type.
L'argument clé loopback
détermine si les adresses de boucle (par exemple ip"127.0.0.1"
, ip"::1"
) sont incluses.
Cette fonction est disponible depuis Julia 1.2.
Exemples
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"
Voir aussi islinklocaladdr
.
Sockets.islinklocaladdr
— Functionislinklocaladdr(addr::IPAddr)
Teste si une adresse IP est une adresse locale de lien. Les adresses locales de lien ne sont pas garanties d'être uniques au-delà de leur segment de réseau, par conséquent, les routeurs ne les transmettent pas. Les adresses locales de lien proviennent des blocs d'adresses 169.254.0.0/16
ou fe80::/10
.
Exemples
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
Obtient toutes les adresses IP du host
. Utilise l'implémentation sous-jacente de getaddrinfo
du système d'exploitation, qui peut effectuer une recherche DNS.
Exemples
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
Le type d'exception lancé lorsqu'une erreur se produit lors de la recherche DNS. Le champ host
indique la chaîne d'URL de l'hôte. Le champ code
indique le code d'erreur basé sur libuv.
Sockets.getnameinfo
— Functiongetnameinfo(hôte::IPAddr) -> String
Effectue une recherche inversée pour l'adresse IP afin de retourner un nom d'hôte et un service en utilisant l'implémentation sous-jacente getnameinfo
du système d'exploitation.
Exemples
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Obtenez l'adresse IP et le port auxquels le socket donné est lié.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Obtenez l'adresse IP et le port du point de terminaison distant auquel le socket donné est connecté. Valide uniquement pour les sockets TCP connectés.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(hôte::Integer) -> IPv4
Retourne un objet IPv4 à partir de l'adresse IP hôte
formatée comme un Integer
.
Exemples
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
Analyse une chaîne d'adresse IPv4 en un objet IPv4
.
Exemples
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(hôte::Integer) -> IPv6
Retourne un objet IPv6 à partir de l'adresse IP hôte
formatée comme un Integer
.
Exemples
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
Analyse une chaîne d'adresse IPv6 en un objet IPv6
.
Exemples
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@ip_str str -> IPAddr
Analyse str
comme une adresse IP.
Exemples
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)
Ouvre un socket TCP en utilisant libuv. Si delay
est vrai, libuv retarde la création du descripteur de fichier du socket jusqu'à la première appel de bind
. TCPSocket
a divers champs pour indiquer l'état du socket ainsi que ses tampons d'envoi/réception.
Sockets.UDPSocket
— TypeUDPSocket()
Ouvrez un socket UDP en utilisant libuv. UDPSocket
a divers champs pour indiquer l'état du socket.
Sockets.accept
— Functionaccept(server[, client])
Accepte une connexion sur le serveur donné et renvoie une connexion au client. Un flux client non initialisé peut être fourni, auquel cas il sera utilisé au lieu de créer un nouveau flux.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Crée un TCPServer
sur n'importe quel port, en utilisant l'indice comme point de départ. Renvoie un tuple du port réel sur lequel le serveur a été créé et le serveur lui-même. L'argument backlog définit la longueur maximale à laquelle la file d'attente des connexions en attente pour sockfd peut croître.
Base.bind
— Functionbind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)
Liez socket
à l'hôte:port
donné. Notez que 0.0.0.0
écoutera sur tous les appareils.
- Le paramètre
ipv6only
désactive le mode double pile. Siipv6only=true
, seule une pile IPv6 est créée. - Si
reuseaddr=true
, plusieurs threads ou processus peuvent se lier à la même adresse sans erreur s'ils définissent tousreuseaddr=true
, mais seul le dernier à se lier recevra du trafic.
bind(chnl::Channel, task::Task)
Associe la durée de vie de chnl
à une tâche. Le Channel
chnl
est automatiquement fermé lorsque la tâche se termine. Toute exception non interceptée dans la tâche est propagée à tous les attendus sur chnl
.
L'objet chnl
peut être explicitement fermé indépendamment de la terminaison de la tâche. Les tâches terminées n'ont aucun effet sur les objets Channel
déjà fermés.
Lorsqu'un canal est lié à plusieurs tâches, la première tâche à se terminer fermera le canal. Lorsque plusieurs canaux sont liés à la même tâche, la terminaison de la tâche fermera tous les canaux liés.
Exemples
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)
Envoyer msg
via socket
à host:port
.
Sockets.recv
— Functionrecv(socket::UDPSocket)
Lire un paquet UDP à partir du socket spécifié et retourner les octets reçus. Cet appel bloque.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
Lire un paquet UDP à partir du socket spécifié, retournant un tuple de (host_port, data)
, où host_port
sera un InetAddr{IPv4} ou InetAddr{IPv6}, selon le cas.
Avant la version 1.3 de Julia, la première valeur retournée était une adresse (IPAddr
). Dans la version 1.3, elle a été changée en InetAddr
.
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
Définir les options du socket UDP.
multicast_loop
: boucle pour les paquets multicast (par défaut :true
).multicast_ttl
: TTL pour les paquets multicast (par défaut :nothing
).enable_broadcast
: le drapeau doit être défini surtrue
si le socket sera utilisé pour des messages de diffusion, sinon le système UDP renverra une erreur d'accès (par défaut :false
).ttl
: Durée de vie des paquets envoyés sur le socket (par défaut :nothing
).
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
L'algorithme de Nagle regroupe plusieurs petits paquets TCP en paquets plus grands. Cela peut améliorer le débit mais aggraver la latence. L'algorithme de Nagle est activé par défaut. Cette fonction définit si l'algorithme de Nagle est actif sur un serveur TCP ou un socket donné. L'option opposée est appelée TCP_NODELAY
dans d'autres langages.
Cette fonction nécessite Julia 1.3 ou une version ultérieure.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Sur les systèmes Linux, le TCP_QUICKACK est désactivé ou activé sur socket
.