Интерфейс SocketOptions
- Все известные реализующие классы:
-
DatagramSocketImpl,SocketImpl
public interface SocketOptions
Методы и константы, которые определяют параметры в этом интерфейсе, предназначены только для реализации. Если вы не подклассируете 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 |
Отключает алгоритм Найгла для этого соединения. |
Краткое описание методов
Подробное описание полей
TCP_NODELAY
@Native static final int TCP_NODELAY
Действительно только для TCP: SocketImpl.
- См. также:
SO_BINDADDR
@Native static final int SO_BINDADDR
Этот параметр обязательно должен быть указан в конструкторе.
Действительно для: SocketImpl, DatagramSocketImpl
- См. также:
SO_REUSEADDR
@Native static final int SO_REUSEADDR
Действительно для: DatagramSocketImpl
- См. также:
SO_REUSEPORT
@Native static final int SO_REUSEPORT
Действительно для: SocketImpl, DatagramSocketImpl
- С:
- 9
- См. также:
SO_BROADCAST
@Native static final int SO_BROADCAST
- С:
- 1.4
- См. также:
IP_MULTICAST_IF
@Native static final int IP_MULTICAST_IF
Действительно для Multicast: DatagramSocketImpl
- См. также:
IP_MULTICAST_IF2
@Native static final int IP_MULTICAST_IF2
- С:
- 1.4
- См. также:
IP_MULTICAST_LOOP
@Native static final int IP_MULTICAST_LOOP
- С:
- 1.4
- См. также:
IP_TOS
@Native static final int IP_TOS
- С:
- 1.4
- См. также:
SO_LINGER
@Native static final int SO_LINGER
Действительно только для TCP: SocketImpl
- См. также:
SO_TIMEOUT
@Native static final int SO_TIMEOUT
ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
Параметр должен быть установлен перед входом в блокирующую операцию, чтобы начать действовать. Если таймаут истекает, и операция продолжает блокироваться, возбуждается java.io.InterruptedIOException. Сокет в этом случае не закрывается.
Действительно для всех сокетов: SocketImpl, DatagramSocketImpl
- См. также:
SO_SNDBUF
@Native static final int SO_SNDBUF
- См. также:
SO_RCVBUF
@Native static final int SO_RCVBUF
- См. также:
SO_KEEPALIVE
@Native static final int SO_KEEPALIVE
- См. также:
SO_OOBINLINE
@Native static final int SO_OOBINLINE
- См. также:
Подробности методов
setOption
void setOption(int optID, Object value) throws SocketException
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
Object getOption(int optID) throws SocketException
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) - См. также:
© 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