Сокеты
#
Sockets.connect
— Method
connect([host], port::Integer) -> TCPSocket
Выполняет подключение к хосту host
на порте port
.
#
Sockets.connect
— Method
connect(path::AbstractString) -> PipeEndpoint
Выполняет подключение к именованному каналу или сокету домена UNIX по пути path
.
Длина пути в Unix ограничена примерно 92 и 108 байтами (см. |
#
Sockets.listen
— Method
listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Прослушивает порт по адресу, указанному с помощью addr
. По умолчанию прослушивается только localhost
. Для прослушивания всех интерфейсов следует передать IPv4(0)
или IPv6(0)
в зависимости от ситуации. backlog
определяет, сколько соединений может находиться в режиме ожидания (без вызова accept
), прежде чем сервер начнет их отклонять. Для backlog
по умолчанию используется 511.
#
Sockets.listen
— Method
listen(path::AbstractString) -> PipeServer
Создает и прослушивает именованный канал или сокет домена UNIX.
Длина пути в Unix ограничена примерно 92 и 108 байтами (см. |
#
Sockets.getaddrinfo
— Function
getaddrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr
Получает первый IP-адрес хоста (host
) указанного типа IPAddr
. Использует базовую реализацию getaddrinfo операционной системы, которая может выполнять поиск DNS.
#
Sockets.getipaddr
— Function
getipaddr() -> 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
— Function
getipaddrs(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 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
— Function
islinklocaladdr(addr::IPAddr)
Проверяет, является ли IP-адрес локальным адресом канала. Локальные адреса каналов не обязательно являются уникальными за пределами своего сегмента сети, поэтому маршрутизаторы их не пересылают. Локальные адреса каналов находятся в блоках адресов 169.254.0.0/16
или fe80::/10
.
Пример
filter(!islinklocaladdr, getipaddrs())
#
Sockets.getalladdrinfo
— Function
getalladdrinfo(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
— Type
DNSError
Тип исключения, возникающего при ошибке в поиске DNS. Поле host
указывает строку URL-адреса хоста. Поле code
указывает код ошибки на основе libuv.
#
Sockets.getnameinfo
— Function
getnameinfo(host::IPAddr) -> String
Выполняет обратный поиск IP-адреса для возврата имени хоста и службы, используя базовую реализацию getnameinfo
операционной системы.
Примеры
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
#
Sockets.getsockname
— Function
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Получает IP-адрес и порт, к которым привязан данный сокет.
#
Sockets.getpeername
— Function
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Получает IP-адрес и порт удаленной конечной точки, к которой подключен данный сокет. Действует только для подключенных TCP-сокетов.
#
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
— Type
TCPSocket(; delay=true)
Открывает TCP-сокет с помощью libuv. Если delay
имеет значение true, libuv откладывает создание дескриптора файла сокета до первого вызова функции bind
. TCPSocket
имеет различные поля для обозначения состояния сокета, а также его буферов отправки или приема.
#
Sockets.UDPSocket
— Type
UDPSocket()
Открывает UDP-сокет с помощью libuv. UDPSocket
имеет различные поля для обозначения состояния сокета.
#
Sockets.accept
— Function
accept(server[, client])
Принимает подключение на заданном сервере и возвращает его клиенту. Может быть предоставлен неинициализированный клиентский поток. В этом случае он будет использоваться вместо создания нового потока.
#
Sockets.listenany
— Function
listenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Создает TCPServer
на любом порту, используя указание в качестве начальной точки. Возвращает кортеж, состоящий из фактического порта, на котором был создан сервер, и самого сервера. Аргумент backlog определяет максимальную длину, до которой может увеличиваться очередь ожидающих подключений для sockfd.
#
Base.bind
— Method
bind(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
, но получать трафик будет только последний привязываемый.
#
Sockets.send
— Function
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)
Отправляет msg
через сокет socket
в host:port
.
#
Sockets.recv
— Function
recv(socket::UDPSocket)
Считывает UDP-пакет из указанного сокета и возвращает полученные байты. Этот вызов блокируется.
#
Sockets.recvfrom
— Function
recvfrom(socket::UDPSocket) -> (host_port, data)
Считывает UDP-пакет из указанного сокета, возвращает кортеж из (host_port, data)
, где host_port
— это InetAddr{IPv4} или InetAddr{IPv6} в зависимости от ситуации.
Совместимость: Julia 1.3
До Julia версии 1.3 первым возвращаемым значением был адрес ( |
#
Sockets.setopt
— Function
setopt(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
— Function
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Включает или отключает алгоритм Нейгла на заданном TCP-сервере или сокете.
Совместимость: Julia 1.3
Для этой функции требуется версия не ниже Julia 1.3. |
#
Sockets.quickack
— Function
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
В системах Linux TCP_QUICKACK отключен или включен на сокете (socket
).