Spec-Zone.ru › OpenJDK 21

Интерфейс 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
Отключает алгоритм Найгла для этого соединения.

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

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

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

TCP_NODELAY

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

Действительно только для 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.

Действительно для Multicast: 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
Этот параметр включает или отключает локальный цикл обратной связи для мультимедийных дейтаграмм. Этот параметр включен по умолчанию для Multicast Sockets.
С:
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 выполняет принудительное закрытие немедленно. Если указанное значение таймаута превышает 65535, оно будет уменьшено до 65535.

Действительно только для 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
Установить подсказку о размере базовых буферов, используемых платформой для исходящего сетевого ввода/вывода. При использовании в set это предложение ядру от приложения о размере буферов для данных, которые должны быть отправлены по сокету. При использовании в get это должно возвращать размер буфера, фактически используемого платформой при отправке данных по этому сокету. Действительно для всех сокетов: SocketImpl, DatagramSocketImpl
См. также:
  • Socket.setSendBufferSize(int)
  • Socket.getSendBufferSize()
  • DatagramSocket.setSendBufferSize(int)
  • DatagramSocket.getSendBufferSize()
  • Значения постоянных полей

SO_RCVBUF

@Native static final int SO_RCVBUF
Установить подсказку о размере базовых буферов, используемых платформой для входящего сетевого ввода/вывода. При использовании в set это предложение ядру от приложения о размере буферов для данных, которые должны быть получены по сокету. При использовании в get это должно возвращать размер буфера, фактически используемого платформой при получении данных по этому сокету. Действительно для всех сокетов: 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, Integer.valueOf(10));
    // OK - set SO_LINGER w/ timeout of 10 sec.
 s.setOption(SO_LINGER, Double.valueOf(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, 2023, 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/21/docs/api/java.base/java/net/SocketOptions.html

Spec-Zone.ru

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