Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
Conéctese al host host
en el puerto port
.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
Conéctese al pipe nombrado / socket de dominio UNIX en path
.
La longitud de la ruta en Unix está limitada a algún lugar entre 92 y 108 bytes (cf. man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Escucha en el puerto en la dirección especificada por addr
. Por defecto, esto escucha solo en localhost
. Para escuchar en todas las interfaces, pasa IPv4(0)
o IPv6(0)
según corresponda. backlog
determina cuántas conexiones pueden estar pendientes (sin haber llamado a accept
) antes de que el servidor comience a rechazarlas. El valor predeterminado de backlog
es 511.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
Crea y escucha en un pipe nombrado / socket de dominio UNIX.
La longitud de la ruta en Unix está limitada a algún lugar entre 92 y 108 bytes (cf. man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
Obtiene la primera dirección IP del host
del tipo IPAddr
especificado. Utiliza la implementación subyacente de getaddrinfo del sistema operativo, que puede realizar una búsqueda DNS.
Ejemplos
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
Obtiene la primera dirección IP disponible de host
, que puede ser una dirección IPv4
o IPv6
. Utiliza la implementación subyacente de getaddrinfo del sistema operativo, que puede realizar una búsqueda DNS.
Sockets.getipaddr
— Functiongetipaddr() -> IPAddr
Obtiene una dirección IP de la máquina local, prefiriendo IPv4 sobre IPv6. Lanza una excepción si no hay direcciones disponibles.
getipaddr(addr_type::Type{T}) where T<:IPAddr -> T
Obtiene una dirección IP de la máquina local del tipo especificado. Lanza una excepción si no hay direcciones del tipo especificado disponibles.
Esta función es un envoltorio de compatibilidad hacia atrás alrededor de getipaddrs
. Las nuevas aplicaciones deben usar getipaddrs
en su lugar.
Ejemplos
julia> getipaddr()
ip"192.168.1.28"
julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"
Ver también getipaddrs
.
Sockets.getipaddrs
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
Obtiene las direcciones IP de la máquina local.
Configurar el parámetro opcional addr_type
a IPv4
o IPv6
hace que solo se devuelvan direcciones de ese tipo.
El argumento clave loopback
determina si se incluyen las direcciones de loopback (por ejemplo, ip"127.0.0.1"
, ip"::1"
).
Esta función está disponible a partir de Julia 1.2.
Ejemplos
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"
Ver también islinklocaladdr
.
Sockets.islinklocaladdr
— Functionislinklocaladdr(addr::IPAddr)
Prueba si una dirección IP es una dirección local de enlace. Las direcciones locales de enlace no garantizan ser únicas más allá de su segmento de red, por lo tanto, los enrutadores no las reenvían. Las direcciones locales de enlace provienen de los bloques de direcciones 169.254.0.0/16
o fe80::/10
.
Ejemplos
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
Obtiene todas las direcciones IP del host
. Utiliza la implementación subyacente de getaddrinfo
del sistema operativo, que puede realizar una búsqueda DNS.
Ejemplos
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
El tipo de excepción lanzada cuando ocurre un error en la búsqueda DNS. El campo host
indica la cadena de URL del host. El campo code
indica el código de error basado en libuv.
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
Realiza una búsqueda inversa para la dirección IP para devolver un nombre de host y un servicio utilizando la implementación subyacente getnameinfo
del sistema operativo.
Ejemplos
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Obtiene la dirección IP y el puerto al que está vinculado el socket dado.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Obtiene la dirección IP y el puerto del extremo remoto al que está conectado el socket dado. Válido solo para sockets TCP conectados.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
Devuelve un objeto IPv4 a partir de la dirección IP host
formateada como un Integer
.
Ejemplos
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
Analiza una cadena de dirección IPv4 en un objeto IPv4
.
Ejemplos
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(host::Integer) -> IPv6
Devuelve un objeto IPv6 a partir de la dirección IP host
formateada como un Integer
.
Ejemplos
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
Analiza una cadena de dirección IPv6 en un objeto IPv6
.
Ejemplos
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@ip_str str -> IPAddr
Analiza str
como una dirección IP.
Ejemplos
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)
Abre un socket TCP usando libuv. Si delay
es verdadero, libuv retrasa la creación del descriptor de archivo del socket hasta la primera llamada a bind
. TCPSocket
tiene varios campos para denotar el estado del socket, así como sus buffers de envío/recepción.
Sockets.UDPSocket
— TypeUDPSocket()
Abre un socket UDP utilizando libuv. UDPSocket
tiene varios campos para denotar el estado del socket.
Sockets.accept
— Functionaccept(server[, client])
Acepta una conexión en el servidor dado y devuelve una conexión al cliente. Se puede proporcionar un flujo de cliente no inicializado, en cuyo caso se utilizará en lugar de crear un nuevo flujo.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Crea un TCPServer
en cualquier puerto, utilizando hint como punto de partida. Devuelve una tupla del puerto real en el que se creó el servidor y el servidor mismo. El argumento backlog define la longitud máxima a la que puede crecer la cola de conexiones pendientes para sockfd.
Base.bind
— Functionbind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)
Vincula socket
al host:port
dado. Ten en cuenta que 0.0.0.0
escuchará en todos los dispositivos.
- El parámetro
ipv6only
desactiva el modo de pila dual. Siipv6only=true
, solo se crea una pila IPv6. - Si
reuseaddr=true
, múltiples hilos o procesos pueden vincularse a la misma dirección sin error si todos establecenreuseaddr=true
, pero solo el último en vincularse recibirá tráfico.
bind(chnl::Channel, task::Task)
Asocia la duración de chnl
con una tarea. Channel
chnl
se cierra automáticamente cuando la tarea termina. Cualquier excepción no capturada en la tarea se propaga a todos los que están a la espera en chnl
.
El objeto chnl
se puede cerrar explícitamente independientemente de la terminación de la tarea. Las tareas que terminan no tienen efecto en los objetos Channel
que ya están cerrados.
Cuando un canal está vinculado a múltiples tareas, la primera tarea que termine cerrará el canal. Cuando múltiples canales están vinculados a la misma tarea, la terminación de la tarea cerrará todos los canales vinculados.
Ejemplos
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)
Envía msg
a través de socket
a host:port
.
Sockets.recv
— Functionrecv(socket::UDPSocket)
Lee un paquete UDP del socket especificado y devuelve los bytes recibidos. Esta llamada bloquea.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
Lee un paquete UDP del socket especificado, devolviendo una tupla de (host_port, data)
, donde host_port
será un InetAddr{IPv4} o InetAddr{IPv6}, según corresponda.
Antes de la versión 1.3 de Julia, el primer valor devuelto era una dirección (IPAddr
). En la versión 1.3 se cambió a un InetAddr
.
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
Establecer opciones del socket UDP.
multicast_loop
: bucle de retorno para paquetes multicast (predeterminado:true
).multicast_ttl
: TTL para paquetes multicast (predeterminado:nothing
).enable_broadcast
: la bandera debe establecerse entrue
si el socket se utilizará para mensajes de difusión, de lo contrario, el sistema UDP devolverá un error de acceso (predeterminado:false
).ttl
: Tiempo de vida de los paquetes enviados por el socket (predeterminado:nothing
).
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
El algoritmo de Nagle agrupa múltiples paquetes TCP pequeños en paquetes más grandes. Esto puede mejorar el rendimiento pero empeorar la latencia. El algoritmo de Nagle está habilitado por defecto. Esta función establece si el algoritmo de Nagle está activo en un servidor TCP o socket dado. La opción opuesta se llama TCP_NODELAY
en otros lenguajes.
Esta función requiere Julia 1.3 o posterior.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
En sistemas Linux, el TCP_QUICKACK está deshabilitado o habilitado en socket
.