Spec-Zone.ru › OpenJDK 17

Интерфейс SocketOptions

Все известные реализующие классы:
DatagramSocketImpl, SocketImpl
public interface SocketOptions
Интерфейс методов для получения/установки параметров сокета. Этот интерфейс реализуется: SocketImpl и DatagramSocketImpl. Подклассы этих классов должны переопределять методы этого интерфейса для поддержки собственных параметров.

Методы и константы, определяющие параметры в этом интерфейсе, предназначены только для реализации. Если вы не наследуете от SocketImpl или DatagramSocketImpl, вы не будете использовать их напрямую. Существуют безопасные по типу методы для получения/установки каждого из этих параметров в Socket, ServerSocket, DatagramSocket и MulticastSocket.

С:
1.1

Краткое описание полей

Модификатор и тип Поле Описание
static final int IP_MULTICAST_IF
Устанавливает интерфейс, по которому будут отправляться пакеты multicast.
static final int IP_MULTICAST_IF2
То же, что и выше.
static final int IP_MULTICAST_LOOP
Этот параметр включает или отключает локальную петлю обратной связи для multicast-дайадграмм.
static final int IP_TOS
Этот параметр устанавливает поле типа службы или класса трафика в заголовке IP для сокета TCP или UDP.
static final int SO_BINDADDR
Получение локального адреса привязки сокета (этот параметр нельзя «установить», только «получить», так как сокеты привязываются при создании, и поэтому локальный привязанный адрес нельзя изменить).
static final int SO_BROADCAST
Устанавливает SO_BROADCAST для сокета.
static final int SO_KEEPALIVE
Когда параметр keepalive установлен для сокета TCP и никаких данных не обменивались по сокету в обоих направлениях в течение 2 часов (ПРИМЕЧАНИЕ: фактическое значение зависит от реализации), TCP автоматически отправляет запрос keepalive собеседнику.
static final int SO_LINGER
Указывает тайм-аут ожидания при закрытии.
static final int SO_OOBINLINE
При установке параметра OOBINLINE все срочные данные TCP, полученные по сокету, будут получены через поток ввода сокета.
static final int SO_RCVBUF
Указание предположительного размера буферов, используемых платформой для входящего сетевого ввода-вывода.
static final int SO_REUSEADDR
Устанавливает SO_REUSEADDR для сокета.
static final int SO_REUSEPORT
Устанавливает SO_REUSEPORT для сокета.
static final int SO_SNDBUF
Указание предположительного размера буферов, используемых платформой для исходящего сетевого ввода-вывода.
static final int SO_TIMEOUT
Устанавливает тайм-аут для блокирующих операций сокета:
static final int TCP_NODELAY
Отключение алгоритма Nagle для этого соединения.

Краткое описание методов

Модификатор и тип Метод Описание
Object getOption(int optID)
Получение значения параметра.
void setOption(int optID, Object value)
Включение/выключение параметра, указанного значением optID.

Подробное описание полей

TCP_NODELAY

@Native static final int TCP_NODELAY
Отключить алгоритм Нагле для этого подключения. Данные, записанные в сеть, не буферизуются, ожидая подтверждения ранее записанных данных.

Допустимо только для TCP: SocketImpl.

См. также:
  • Socket.setTcpNoDelay(boolean)
  • Socket.getTcpNoDelay()
  • Значения константных полей

SO_BINDADDR

@Native static final int SO_BINDADDR
Получить привязку локального адреса сокета (этот параметр нельзя «установить», только «получить», так как сокеты привязываются во время создания, и поэтому локальный привязанный адрес нельзя изменить). По умолчанию локальный адрес сокета — INADDR_ANY, то есть любой локальный адрес на хосте с несколькими интерфейсами. Хост с несколькими интерфейсами может использовать этот параметр для приема подключений только к одному из своих адресов (в случае ServerSocket или DatagramSocket) или для указания адреса возврата подключению (в случае Socket или DatagramSocket). Параметром этого параметра является InetAddress.

Этот параметр обязательно должен быть указан в конструкторе.

Допустимо для: SocketImpl, DatagramSocketImpl

См. также:
  • Socket.getLocalAddress()
  • DatagramSocket.getLocalAddress()
  • Значения константных полей

SO_REUSEADDR

@Native static final int SO_REUSEADDR
Устанавливает SO_REUSEADDR для сокета. Используется только для MulticastSockets в Java, и по умолчанию установлен для MulticastSockets.

Допустимо для: DatagramSocketImpl

См. также:
  • Значения константных полей

SO_REUSEPORT

@Native static final int SO_REUSEPORT
Устанавливает SO_REUSEPORT для сокета. Этот параметр включает и выключает возможность иметь несколько сокетов, слушающих один и тот же адрес и порт.

Допустимо для: SocketImpl, DatagramSocketImpl

С момента:
9
См. также:
  • StandardSocketOptions.SO_REUSEPORT
  • Значения константных полей

SO_BROADCAST

@Native static final int SO_BROADCAST
Устанавливает SO_BROADCAST для сокета. Этот параметр включает и выключает возможность процесса отправлять широковещательные сообщения. Поддерживается только для датаграммных сокетов и только в сетях, которые поддерживают концепцию широковещательных сообщений (например, Ethernet, Token Ring и т. д.), и по умолчанию установлен для DatagramSockets.
С момента:
1.4
См. также:
  • Значения константных полей

IP_MULTICAST_IF

@Native static final int IP_MULTICAST_IF
Указывает выходной интерфейс для отправки мультимедийных пакетов. Полезно на хостах с несколькими сетевыми интерфейсами, когда приложения хотят использовать не системный интерфейс по умолчанию. Принимает/возвращает InetAddress.

Допустимо для мультимедийного: DatagramSocketImpl

См. также:
  • MulticastSocket.setInterface(InetAddress)
  • MulticastSocket.getInterface()
  • Значения константных полей

IP_MULTICAST_IF2

@Native static final int IP_MULTICAST_IF2
То же самое, что и выше. Этот параметр введен для сохранения поведения с IP_MULTICAST_IF таким же, как и раньше, в то время как этот новый параметр может поддерживать установку выходных интерфейсов с адресами IPv4 и IPv6. ПРИМЕЧАНИЕ: убедитесь, что нет конфликта с этим.
С момента:
1.4
См. также:
  • MulticastSocket.setNetworkInterface(NetworkInterface)
  • MulticastSocket.getNetworkInterface()
  • Значения константных полей

IP_MULTICAST_LOOP

@Native static final int IP_MULTICAST_LOOP
Этот параметр включает или отключает локальную петлю обратной связи для мультимедийных датаграмм. Этот параметр включен по умолчанию для мультимедийных сокетов.
С момента:
1.4
См. также:
  • Значения константных полей

IP_TOS

@Native static final int IP_TOS
Этот параметр устанавливает поле типа обслуживания или класса трафика в заголовке IP для сокета TCP или UDP.
С момента:
1.4
См. также:
  • Значения константных полей

SO_LINGER

@Native static final int SO_LINGER
Указать таймаут ожидания при закрытии. Этот параметр отключает/включает немедленный возврат из метода close() сокета TCP. Включение этого параметра с ненулевым целым значением timeout означает, что close() будет блокироваться до тех пор, пока не будут переданы и подтверждены все данные, отправленные собеседнику, после чего сокет будет закрыт корректно. После истечения таймаута ожидания сокет закрывается принудительно с TCP RST. Включение параметра с таймаутом 0 выполняет принудительное закрытие немедленно. Если заданное значение таймаута превышает 65 535, оно будет уменьшено до 65 535.

Допустимо только для TCP: SocketImpl

См. также:
  • Socket.setSoLinger(boolean, int)
  • Socket.getSoLinger()
  • Значения константных полей

SO_TIMEOUT

@Native static final int SO_TIMEOUT
Установить таймаут для блокирующих операций сокета:
 ServerSocket.accept();
 SocketInputStream.read();
 DatagramSocket.receive();
 

Параметр должен быть установлен перед входом в блокирующую операцию, чтобы он вступил в силу. Если таймаут истекает и операция по-прежнему будет блокироваться, возникает исключение java.io.InterruptedIOException. Сокет в этом случае не закрывается.

Допустимо для всех сокетов: SocketImpl, DatagramSocketImpl

См. также:
  • Socket.setSoTimeout(int)
  • ServerSocket.setSoTimeout(int)
  • DatagramSocket.setSoTimeout(int)
  • Значения константных полей

SO_SNDBUF

@Native static final int SO_SNDBUF
Указать предпочтительный размер буферов, используемых платформой для исходящего сетевого ввода/вывода. При установке — это предложение ядру от приложения о размере буферов для отправляемых данных. При получении — это размер буфера, фактически используемого платформой при отправке данных по этому сокету. Допустимо для всех сокетов: SocketImpl, DatagramSocketImpl
См. также:
  • Socket.setSendBufferSize(int)
  • Socket.getSendBufferSize()
  • DatagramSocket.setSendBufferSize(int)
  • DatagramSocket.getSendBufferSize()
  • Значения константных полей

SO_RCVBUF

@Native static final int SO_RCVBUF
Указать предпочтительный размер буферов, используемых платформой для входящего сетевого ввода/вывода. При установке — это предложение ядру от приложения о размере буферов для принимаемых данных. При получении — это размер буфера, фактически используемого платформой при приеме данных по этому сокету. Допустимо для всех сокетов: SocketImpl, DatagramSocketImpl
См. также:
  • Socket.setReceiveBufferSize(int)
  • Socket.getReceiveBufferSize()
  • DatagramSocket.setReceiveBufferSize(int)
  • DatagramSocket.getReceiveBufferSize()
  • Значения константных полей

SO_KEEPALIVE

@Native static final int SO_KEEPALIVE
Если для сокета TCP установлено значение keepalive и в течение 2 часов (ПРИМЕЧАНИЕ: фактическое значение зависит от реализации) по сокету не было обмена данными в обоих направлениях, TCP автоматически отправляет запрос keepalive своему партнёру. Этот запрос — это сегмент TCP, на который партнёр должен ответить. Ожидается один из трёх ответов: 1. Партнёр отвечает ожидаемым ACK. Приложение не уведомляется (поскольку всё в порядке). TCP отправит другой запрос после ещё 2 часов бездействия. 2. Партнёр отвечает RST, что сообщает локальному TCP о сбою и перезагрузке хоста партнёра. Сокет закрывается. 3. От партнёра нет ответа. Сокет закрывается. Цель этого параметра — определить, не произошёл ли сбой на хосте партнёра. Действительно только для сокета TCP: SocketImpl
См. также:
  • Socket.setKeepAlive(boolean)
  • Socket.getKeepAlive()
  • Значения константных полей

SO_OOBINLINE

@Native static final int SO_OOBINLINE
Когда установлен параметр OOBINLINE, любые срочные данные TCP, полученные по сокету, будут получены через входной поток сокета. При отключенном параметре (что является значением по умолчанию) срочные данные молча игнорируются.
См. также:
  • Socket.setOOBInline(boolean)
  • Socket.getOOBInline()
  • Значения константных полей

Подробное описание методов

setOption

void setOption(int optID, Object value) throws SocketException
Включить/выключить параметр, указанный в optID. Если параметр должен быть включён и требует специфического для параметра "значения", это значение передаётся в value. Фактический тип значения специфичен для параметра, и ошибка передавать что-либо, что не имеет ожидаемого типа:
 SocketImpl s;
 ...
 s.setOption(SO_LINGER, new Integer(10));
    // OK - set SO_LINGER w/ timeout of 10 sec.
 s.setOption(SO_LINGER, new Double(10));
    // ERROR - expects java.lang.Integer
Если запрашиваемый параметр является двоичным, его можно установить с помощью этого метода, используя java.lang.Boolean:
 s.setOption(TCP_NODELAY, Boolean.TRUE);
    // OK - enables TCP_NODELAY, a binary option
 

Любой параметр можно отключить с помощью этого метода с помощью Boolean.FALSE:
 s.setOption(TCP_NODELAY, Boolean.FALSE);
    // OK - disables TCP_NODELAY
 s.setOption(SO_LINGER, Boolean.FALSE);
    // OK - disables SO_LINGER
 

Для параметра, имеющего понятие включения и выключения и требующего параметра, отличного от булевого, установка его значения на что-либо, кроме Boolean.FALSE, неявно включает его.
Выбрасывает SocketException, если параметр не распознан, сокет закрыт или произошла ошибка низкого уровня
Параметры:
optID - идентификатор параметра
value - параметр сокета
Исключения:
SocketException - если параметр не распознан, сокет закрыт или произошла ошибка низкого уровня
См. также:
  • getOption(int)

getOption

Object getOption(int optID) throws SocketException
Получить значение параметра. Двоичные параметры вернут java.lang.Boolean.TRUE, если включены, и java.lang.Boolean.FALSE, если отключены, например:
 SocketImpl s;
 ...
 Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
 if (noDelay.booleanValue()) {
     // true if TCP_NODELAY is enabled...
 ...
 }
 

Для параметров, которые принимают определённый тип в качестве параметра, getOption(int) вернёт значение параметра, иначе вернёт java.lang.Boolean.FALSE:

 Object o = s.getOption(SO_LINGER);
 if (o instanceof Integer) {
     System.out.print("Linger time is " + ((Integer)o).intValue());
 } else {
   // the true type of o is java.lang.Boolean.FALSE;
 }
 
Параметры:
optID - int идентификатор параметра для извлечения
Возвращает:
значение параметра
Исключения:
SocketException - если сокет закрыт
SocketException - если optID неизвестен на стеке протоколов (включая SocketImpl)
См. также:
  • setOption(int, java.lang.Object)

© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/SocketOptions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API