Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
Подключитесь к хосту host
на порту port
.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
Подключиться к именованному каналу / сокету домена UNIX по path
.
Длина пути в Unix ограничена где-то между 92 и 108 байтами (см. man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Прослушивайте порт на адресе, указанном в addr
. По умолчанию это прослушивание только на localhost
. Чтобы прослушивать на всех интерфейсах, передайте IPv4(0)
или IPv6(0)
в зависимости от ситуации. backlog
определяет, сколько соединений может быть в ожидании (не вызвав accept
), прежде чем сервер начнет их отклонять. Значение по умолчанию для backlog
равно 511.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
Создайте и слушайте именованный канал / сокет домена UNIX.
Длина пути в Unix ограничена где-то между 92 и 108 байтами (см. man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
Получает первый IP-адрес host
указанного типа IPAddr
. Использует реализацию getaddrinfo операционной системы, которая может выполнять DNS-запрос.
Примеры
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
Получает первый доступный IP-адрес host
, который может быть как IPv4
, так и IPv6
адресом. Использует реализацию getaddrinfo операционной системы, которая может выполнять DNS-запрос.
Sockets.getipaddr
— Functiongetipaddr() -> 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
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
Получить IP-адреса локальной машины.
Установка необязательного параметра addr_type
в IPv4
или IPv6
приводит к возврату только адресов этого типа.
Аргумент ключевого слова loopback
определяет, будут ли включены адреса обратной связи (например, ip"127.0.0.1"
, ip"::1"
).
Эта функция доступна начиная с 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
— Functionislinklocaladdr(addr::IPAddr)
Проверяет, является ли IP-адрес адресом локальной связи. Адреса локальной связи не гарантируют уникальность за пределами их сетевого сегмента, поэтому маршрутизаторы не пересылают их. Адреса локальной связи находятся в диапазонах адресов 169.254.0.0/16
или fe80::/10
.
Примеры
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
Получает все IP-адреса host
. Использует реализацию getaddrinfo
операционной системы, которая может выполнять DNS-запрос.
Примеры
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
Тип исключения, выбрасываемого при возникновении ошибки в DNS-запросе. Поле host
указывает строку URL хоста. Поле code
указывает код ошибки на основе libuv.
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
Выполняет обратный поиск для IP-адреса, чтобы вернуть имя хоста и службу, используя реализацию getnameinfo
операционной системы.
Примеры
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Получите IP-адрес и порт, к которым привязан данный сокет.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Получите IP-адрес и порт удаленной конечной точки, к которой подключен данный сокет. Действительно только для подключенных TCP-сокетов.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
Вернуть объект IPv4 из IP-адреса host
, отформатированного как Integer
.
Примеры
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
Парсит строку адреса IPv4 в объект IPv4
.
Примеры
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(host::Integer) -> IPv6
Вернуть объект IPv6 из IP-адреса host
, отформатированного как Integer
.
Примеры
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
Парсит строку адреса IPv6 в объект IPv6
.
Примеры
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@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
— TypeTCPSocket(; delay=true)
Откройте TCP-сокет с использованием libuv. Если delay
истинно, libuv задерживает создание дескриптора файла сокета до первого bind
вызова. TCPSocket
имеет различные поля для обозначения состояния сокета, а также его буферов отправки/получения.
Sockets.UDPSocket
— TypeUDPSocket()
Откройте UDP-сокет с использованием libuv. UDPSocket
имеет различные поля для обозначения состояния сокета.
Sockets.accept
— Functionaccept(server[, client])
Принимает соединение на данном сервере и возвращает соединение с клиентом. Может быть предоставлен неинициализированный клиентский поток, в этом случае он будет использован вместо создания нового потока.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Создает TCPServer
на любом порту, используя подсказку в качестве отправной точки. Возвращает кортеж с фактическим портом, на котором был создан сервер, и самим сервером. Аргумент backlog определяет максимальную длину, до которой может расти очередь ожидающих подключений для sockfd.
Base.bind
— Functionbind(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
— Functionsend(socket::UDPSocket, host::IPAddr, port::Integer, msg)
Отправить msg
через socket
на host:port
.
Sockets.recv
— Functionrecv(socket::UDPSocket)
Читает UDP-пакет из указанного сокета и возвращает полученные байты. Этот вызов блокирует выполнение.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
Читает UDP-пакет из указанного сокета, возвращая кортеж (host_port, data)
, где host_port
будет InetAddr{IPv4} или InetAddr{IPv6}, в зависимости от ситуации.
До версии Julia 1.3 первое возвращаемое значение было адресом (IPAddr
). В версии 1.3 оно было изменено на InetAddr
.
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
Установить параметры UDP сокета.
multicast_loop
: обратная связь для мультикастовых пакетов (по умолчанию:true
).multicast_ttl
: TTL для мультикастовых пакетов (по умолчанию:nothing
).enable_broadcast
: флаг должен быть установлен вtrue
, если сокет будет использоваться для широковещательных сообщений, в противном случае система UDP вернет ошибку доступа (по умолчанию:false
).ttl
: Время жизни пакетов, отправляемых через сокет (по умолчанию:nothing
).
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Алгоритм Нагля объединяет несколько маленьких TCP-пакетов в более крупные. Это может улучшить пропускную способность, но ухудшить задержку. Алгоритм Нагля включен по умолчанию. Эта функция устанавливает, активен ли алгоритм Нагля на данном TCP-сервере или сокете. Противоположный вариант называется TCP_NODELAY
в других языках.
Эта функция требует Julia 1.3 или более поздней версии.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
На системах Linux TCP_QUICKACK отключен или включен на socket
.