Sockets

Sockets

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

Connect to the host host on port port.

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

Connect to the named pipe / UNIX domain socket at path.

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

Listen on port on the address specified by addr. By default this listens on localhost only. To listen on all interfaces pass IPv4(0) or IPv6(0) as appropriate. backlog determines how many connections can be pending (not having called accept) before the server will begin to reject them. The default value of backlog is 511.

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

Create and listen on a named pipe / UNIX domain socket.

Sockets.getaddrinfoFunction.
getalladdrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr

Gets the first IP address of the host of the specified IPAddr type. Uses the operating system's underlying getaddrinfo implementation, which may do a DNS lookup.

Sockets.getipaddrFunction.
getipaddr() -> IPAddr

Get the IP address of the local machine.

Examples

julia> getipaddr()
ip"192.168.1.28"
getalladdrinfo(host::AbstractString) -> Vector{IPAddr}

Gets all of the IP addresses of the host. Uses the operating system's underlying getaddrinfo implementation, which may do a DNS lookup.

Example

julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
 ip"172.217.6.174"
 ip"2607:f8b0:4000:804::200e"
Sockets.getnameinfoFunction.
getnameinfo(host::IPAddr) -> String

Performs a reverse-lookup for IP address to return a hostname and service using the operating system's underlying getnameinfo implementation.

Examples

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

Get the IP address and port that the given socket is bound to.

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

Get the IP address and port of the remote endpoint that the given socket is connected to. Valid only for connected TCP sockets.

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

Returns an IPv4 object from ip address host formatted as an Integer.

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

Returns an IPv6 object from ip address host formatted as an Integer.

julia> IPv6(3223256218)
ip"::c01e:fc9a"
TCPSocket(; delay=true)

Open a TCP socket using libuv. If delay is true, libuv delays creation of the socket's file descriptor till the first bind call. TCPSocket has various fields to denote the state of the socket as well as its send/receive buffers.

UDPSocket()

Open a UDP socket using libuv. UDPSocket has various fields to denote the state of the socket.

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

Accepts a connection on the given server and returns a connection to the client. An uninitialized client stream may be provided, in which case it will be used instead of creating a new stream.

Sockets.listenanyFunction.
listenany([host::IPAddr,] port_hint) -> (UInt16, TCPServer)

Create a TCPServer on any port, using hint as a starting point. Returns a tuple of the actual port that the server was created on and the server itself.

Base.bindFunction.
bind(chnl::Channel, task::Task)

Associate the lifetime of chnl with a task. Channel chnl is automatically closed when the task terminates. Any uncaught exception in the task is propagated to all waiters on chnl.

The chnl object can be explicitly closed independent of task termination. Terminating tasks have no effect on already closed Channel objects.

When a channel is bound to multiple tasks, the first task to terminate will close the channel. When multiple channels are bound to the same task, termination of the task will close all of the bound channels.

Examples

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: foo
Stacktrace:
[...]
source
bind(socket::Union{UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)

Bind socket to the given host:port. Note that 0.0.0.0 will listen on all devices.

  • The ipv6only parameter disables dual stack mode. If ipv6only=true, only an IPv6 stack is created.
  • If reuseaddr=true, multiple threads or processes can bind to the same address without error if they all set reuseaddr=true, but only the last to bind will receive any traffic.
Sockets.sendFunction.
send(socket::UDPSocket, host, port::Integer, msg)

Send msg over socket to host:port.

Sockets.recvFunction.
recv(socket::UDPSocket)

Read a UDP packet from the specified socket, and return the bytes received. This call blocks.

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

Read a UDP packet from the specified socket, returning a tuple of (address, data), where address will be either IPv4 or IPv6 as appropriate.

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

Set UDP socket options.

  • multicast_loop: loopback for multicast packets (default: true).
  • multicast_ttl: TTL for multicast packets (default: nothing).
  • enable_broadcast: flag must be set to true if socket will be used for broadcast messages, or else the UDP system will return an access error (default: false).
  • ttl: Time-to-live of packets sent on the socket (default: nothing).