Интерфейс 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 |
Отключение алгоритма Nagle для этого соединения. |
Краткое описание методов
Подробное описание полей
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
Допустимо для мультимедийного: DatagramSocketImpl
IP_MULTICAST_IF2
@Native static final int IP_MULTICAST_IF2
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, 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
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, 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