Spec-Zone.ru › OpenJDK 21

Класс SctpMultiChannel

java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
java.nio.channels.SelectableChannel
java.nio.channels.spi.AbstractSelectableChannel
com.sun.nio.sctp.SctpMultiChannel
Все реализуемые интерфейсы:
Closeable, AutoCloseable, Channel, InterruptibleChannel
public abstract class SctpMultiChannel extends AbstractSelectableChannel
Выбираемый канал для сокетов SCTP, ориентированных на сообщения.

SCTP-мультиканал поддерживает множество ассоциаций на одном сокете. Канал SctpMultiChannel создается путем вызова метода open этого класса. Недавно созданный канал открыт, но еще не привязан. Попытка вызвать метод receive незакрепленного канала приведет к тому, что будет брошено исключение NotYetBoundException. Попытка вызвать метод send незакрепленного канала приведет к тому, что он сначала вызовет метод bind. Адрес(а), к которому привязан сокет канала, можно получить, вызвав getAllLocalAddresses.

Сообщения могут отправляться и приниматься без явного создания ассоциации с удаленным узлом. Канал неявно настроит новую ассоциацию всякий раз, когда он отправляет или получает сообщение от удаленного узла, если с этим узлом еще нет ассоциации. При успешном создании ассоциации уведомление association changed будет отправлено в стек SCTP, при этом параметр event будет установлен в значение COMM_UP. Это уведомление можно получить, вызвав receive.

Параметры сокета настраиваются с помощью метода setOption. SctpMultiChannel поддерживает следующие параметры:

Параметры сокета
Название параметра Описание
SCTP_DISABLE_FRAGMENTS Включает или выключает фрагментацию сообщений
SCTP_EXPLICIT_COMPLETE Включает или выключает явное завершение сообщения
SCTP_FRAGMENT_INTERLEAVE Управляет представлением сообщений для получателя сообщений
SCTP_INIT_MAXSTREAMS Максимальное количество потоков, запрашиваемых локальным узлом во время инициализации ассоциации
SCTP_NODELAY Включает или выключает алгоритм типа Nagle
SCTP_PRIMARY_ADDR Запрашивает, чтобы локальный стек SCTP использовал указанный адрес узла как основной для ассоциации
SCTP_SET_PEER_PRIMARY_ADDR Запрашивает, чтобы узел-партнер отметил указанный адрес как основной для ассоциации
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_LINGER Задержка при закрытии, если присутствуют данные (только для блокирующего режима)
Дополнительные (специфичные для реализации) параметры также могут поддерживаться. Список поддерживаемых параметров получается путем вызова метода supportedOptions.

Мультиканалы SCTP безопасны для использования в нескольких потоках одновременно. Они поддерживают одновременную отправку и прием, хотя в любой момент времени отправка и прием может выполняться только одним потоком.

С:
1.7

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

SctpMultiChannel(SelectorProvider provider)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

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

Модификатор и тип Метод Описание
abstract Set<Association> associations()
Возвращает открытые ассоциации на сокете этого канала.
final SctpMultiChannel bind(SocketAddress local)
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.
abstract SctpMultiChannel bind(SocketAddress local, int backlog)
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.
abstract SctpMultiChannel bindAddress(InetAddress address)
Добавляет указанный адрес в привязанные адреса для сокета канала.
abstract SctpChannel branch(Association association)
Ветвление ассоциации.
abstract Set<SocketAddress> getAllLocalAddresses()
Возвращает все адреса сокетов, к которым привязан сокет этого канала.
abstract <T> T getOption(SctpSocketOption<T> name, Association association)
Возвращает значение параметра сокета.
abstract Set<SocketAddress> getRemoteAddresses(Association association)
Возвращает все удаленные адреса, к которым подключена данная ассоциация на сокете этого канала.
static SctpMultiChannel open()
Открывает SCTP-мультиканал.
abstract <T> MessageInfo receive(ByteBuffer buffer, T attachment, NotificationHandler<T> handler)
Принимает сообщение и/или обрабатывает уведомление через этот канал.
abstract int send(ByteBuffer buffer, MessageInfo messageInfo)
Отправляет сообщение через этот канал.
abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name, T value, Association association)
Устанавливает значение параметра сокета.
abstract SctpMultiChannel shutdown(Association association)
Закрытие ассоциации без закрытия канала.
abstract Set<SctpSocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим каналом.
abstract SctpMultiChannel unbindAddress(InetAddress address)
Удаляет указанный адрес из привязанных адресов для сокета канала.
final int validOps()
Возвращает набор операций, идентифицирующий поддерживаемые этим каналом операции.

Методы, объявленные в классе java.nio.channels.spi.AbstractSelectableChannel

blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register

Методы, объявленные в классе java.nio.channels.SelectableChannel

register

Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel

begin, close, end, isOpen

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе java.nio.channels.Channel

isOpen

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

SctpMultiChannel

protected SctpMultiChannel(SelectorProvider provider)
Инициализирует новый экземпляр этого класса.
Параметры:
provider - Провайдер селектора для этого канала

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

open

public static SctpMultiChannel open() throws IOException
Открывает многоканальный SCTP.

Новый канал не привязан.

Возвращает:
Новый многоканальный SCTP
Исключения:
UnsupportedOperationException - Если протокол SCTP не поддерживается
IOException - Если произошла ошибка ввода-вывода

associations

public abstract Set<Association> associations() throws IOException
Возвращает открытые ассоциации в сокете этого канала.

В возвращаемый набор ассоциаций включаются только ассоциации, для которых было получено событие изменения ассоциации COMM_UP. Ассоциации, для которых были получены события изменения ассоциации COMM_LOST или SHUTDOWN, удаляются из набора ассоциаций.

Возвращаемый набор ассоциаций является снимком открытых ассоциаций на момент вызова этого метода.

Возвращает:
A Set, содержащий открытые ассоциации, или пустой Set, если их нет.
Исключения:
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла другая ошибка ввода-вывода

bind

public abstract SctpMultiChannel bind(SocketAddress local, int backlog) throws IOException
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.

Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остается привязанным до закрытия канала. Эта связь может не обязательно быть с адресом local, так как она может быть удалена с помощью unbindAddress, но всегда будет хотя бы один локальный адрес, привязанный к сокету канала после успешного завершения вызова этого метода.

После успешной привязки сокета канала к определенному адресу (не автоматически назначенному), к нему могут быть добавлены дополнительные адреса с помощью bindAddress или удалены с помощью unbindAddress.

Параметр backlog — максимальное количество ожидающих подключений к сокету. Его точное значение зависит от реализации. Реализация может установить максимальную длину, зависящую от реализации, или игнорировать параметр. Если параметр backlog имеет значение 0, или отрицательное значение, используется значение по умолчанию, зависящее от реализации.

Параметры:
local - Локальный адрес для привязки сокета или null для привязки сокета к автоматически назначенному адресу сокета
backlog - Максимальное количество ожидающих подключений
Возвращает:
Этот канал
Исключения:
ClosedChannelException - Если этот канал закрыт
AlreadyBoundException - Если этот канал уже привязан
UnsupportedAddressTypeException - Если тип заданного адреса не поддерживается
SecurityException - Если установлен менеджер безопасности и его метод checkListen отклоняет операцию
IOException - Если произошла другая ошибка ввода-вывода

bind

public final SctpMultiChannel bind(SocketAddress local) throws IOException
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.

Этот метод работает так, как если бы его вызов был эквивалентен оценке выражения:

 bind(local, 0);
 
Параметры:
local - Локальный адрес для привязки сокета или null для привязки сокета к автоматически назначенному адресу сокета
Возвращает:
Этот канал
Исключения:
ClosedChannelException - Если этот канал закрыт
AlreadyBoundException - Если этот канал уже привязан
UnsupportedAddressTypeException - Если тип заданного адреса не поддерживается
SecurityException - Если установлен менеджер безопасности и его метод checkListen отклоняет операцию
IOException - Если произошла другая ошибка ввода-вывода

bindAddress

public abstract SctpMultiChannel bindAddress(InetAddress address) throws IOException
Добавляет указанный адрес к привязанным адресам для сокета канала.

Указанный адрес не должен быть адресом wildcard. Канал должен быть предварительно привязан с помощью bind перед вызовом этого метода, в противном случае будет выброшено исключение NotYetBoundException. Метод bind принимает в качестве аргумента SocketAddress, который обычно содержит номер порта и адрес. Адреса, привязанные позже с помощью этого метода, являются просто адресами, так как номер порта SCTP остается неизменным на протяжении всего жизненного цикла канала.

Новые ассоциации, установленные после успешного завершения этого метода, будут связаны с заданным адресом. Добавление адресов к существующим ассоциациям — это опциональная функциональность. Если конечная точка поддерживает динамическую переконфигурацию адреса, она может отправить соответствующее сообщение партнеру для изменения списков адресов партнера.

Параметры:
address - Адрес для добавления к привязанным адресам сокета
Возвращает:
Этот канал
Исключения:
ClosedChannelException - Если этот канал закрыт
NotYetBoundException - Если этот канал еще не привязан
AlreadyBoundException - Если этот канал уже привязан к заданному адресу
IllegalArgumentException - Если адрес — null или адрес wildcard
IOException - Если произошла другая ошибка ввода-вывода

unbindAddress

public abstract SctpMultiChannel unbindAddress(InetAddress address) throws IOException
Удаляет указанный адрес из привязанных адресов для сокета канала.

Указанный адрес не должен быть адресом wildcard. Канал должен быть предварительно привязан с помощью bind перед вызовом этого метода, в противном случае будет выброшено исключение NotYetBoundException.

Если этот метод вызывается для канала, у которого address не является одним из привязанных адресов или у которого привязан только один локальный адрес, то этот метод выбрасывает IllegalUnbindException.

Изначальный адрес, к которому привязан сокет канала с помощью bind, может быть удален из привязанных адресов сокета канала.

Новые ассоциации, установленные после успешного завершения этого метода, не будут связаны с заданным адресом. Удаление адресов из существующих ассоциаций является опциональной функциональностью. Если конечная точка поддерживает динамическую переконфигурацию адреса, она может отправить соответствующее сообщение партнеру для изменения списков адресов партнера.

Параметры:
address - Адрес для удаления из привязанных адресов сокета
Возвращает:
Этот канал
Исключения:
ClosedChannelException - Если этот канал закрыт
NotYetBoundException - Если этот канал еще не привязан
IllegalUnbindException - address не привязан к сокету канала или у канала привязан только один адрес
IllegalArgumentException - Если адрес — null или адрес wildcard
IOException - Если произошла другая ошибка ввода-вывода

getAllLocalAddresses

public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
Возвращает все адреса сокета, к которым привязан сокет этого канала.
Возвращает:
Все адреса сокета, к которым привязан сокет этого канала, или пустой Set, если сокет канала не привязан
Исключения:
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода

getRemoteAddresses

public abstract Set<SocketAddress> getRemoteAddresses(Association association) throws IOException
Возвращает все удаленные адреса, к которым подключена данная ассоциация в сокете этого канала.
Параметры:
association - Ассоциация
Возвращает:
Все удаленные адреса для данной ассоциации или пустой Set, если ассоциация закрыта
Исключения:
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода

shutdown

public abstract SctpMultiChannel shutdown(Association association) throws IOException
Закрывает ассоциацию без закрытия канала.
Параметры:
association - Ассоциация для закрытия
Возвращает:
Этот канал
Исключения:
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла другая ошибка ввода-вывода
END_OF_DOCUMENT_MARKER

getOption

public abstract <T> T getOption(SctpSocketOption<T> name, Association association) throws IOException
Возвращает значение параметра сокета.

Обратите внимание, что некоторые параметры извлекаются из сокета канала, поэтому параметр association не применим и будет проигнорирован, если указан. Однако, если параметр специфичен для ассоциации, то необходимо указать ассоциацию.

Type Parameters:
T - Тип значения параметра сокета
Parameters:
name - Параметр сокета
association - Ассоциация, чьё значение параметра должно быть извлечено, или null если это значение должно быть извлечено на уровне сокета канала.
Returns:
Значение параметра сокета. Значение null может быть допустимым значением для некоторых параметров сокета.
Throws:
UnsupportedOperationException - Если параметр сокета не поддерживается данным каналом
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода
See Also:
  • SctpStandardSocketOptions

setOption

public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name, T value, Association association) throws IOException
Устанавливает значение параметра сокета.

Обратите внимание, что некоторые параметры извлекаются из сокета канала, поэтому параметр association не применим и будет проигнорирован, если указан. Однако, если параметр специфичен для ассоциации, то необходимо указать ассоциацию.

Type Parameters:
T - Тип значения параметра сокета
Parameters:
name - Параметр сокета
value - Значение параметра сокета. Значение null может быть допустимым значением для некоторых параметров сокета.
association - Ассоциация, чьё значение параметра должно быть установлено, или null если это значение должно быть установлено на уровне сокета канала.
Returns:
Этот канал
Throws:
UnsupportedOperationException - Если параметр сокета не поддерживается данным каналом
IllegalArgumentException - Если значение не является допустимым значением для данного параметра сокета
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода
See Also:
  • SctpStandardSocketOptions

supportedOptions

public abstract Set<SctpSocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых данным каналом.

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

Returns:
Набор параметров сокета, поддерживаемых данным каналом

validOps

public final int validOps()
Возвращает набор операций, определяющих поддерживаемые операции этого канала.

SCTP мультиканалы поддерживают чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_READ | SelectionKey.OP_WRITE).

Specified by:
validOps в классе SelectableChannel
Returns:
Набор допустимых операций

receive

public abstract <T> MessageInfo receive(ByteBuffer buffer, T attachment, NotificationHandler<T> handler) throws IOException
Принимает сообщение и/или обрабатывает уведомление через этот канал.

Если сообщение или уведомление немедленно доступны, или если этот канал находится в режиме блокировки и одно из них в конечном итоге станет доступным, то сообщение или уведомление возвращаются или обрабатываются соответственно. Если этот канал находится в режиме неблокирующей работы, и сообщение или уведомление немедленно недоступны, то этот метод немедленно возвращает null.

Если этот метод получает сообщение, оно копируется в заданный буфер байтов, и возвращается MessageInfo. Сообщение передается в заданный буфер байтов начиная с его текущей позиции, и позиция буфера увеличивается на количество прочитанных байтов. Если оставшихся байтов в буфере меньше, чем требуется для хранения сообщения, или базовый входной буфер не содержит полное сообщение, то вызов isComplete для возвращенного MessageInfo вернет false, и потребуется больше вызовов этого метода для полного потребления сообщения. Только одно сообщение за раз будет частично доставлено в любом потоке. Параметр сокета SCTP_FRAGMENT_INTERLEAVE управляет различными аспектами того, как происходит переплетение сообщений.

Если этот метод получает уведомление, то соответствующий метод заданного обработчика, если таковой есть, вызывается. Если обработчик возвращает CONTINUE, то этот метод попытается получить другое сообщение/уведомление, в противном случае, если возвращается RETURN, этот метод вернет null. Если обработчик сгенерирует необработанное исключение, оно будет распространено вверх по стеку через этот метод.

Если установлена система безопасности, то для каждой новой настройки ассоциации этот метод проверяет, что исходный адрес и номер порта ассоциации разрешены методом системы безопасности checkAccept.

Этот метод может быть вызван в любое время. Если другой поток уже инициировал операцию получения по этому каналу, то вызов этого метода будет заблокирован до завершения первой операции. Заданный обработчик вызывается без удержания каких-либо блокировок, используемых для обеспечения вышеупомянутой политики синхронизации, таким образом, обработчики не будут приостанавливать другие потоки от получения. Обработчик не должен вызывать метод receive этого канала, в противном случае будет брошено исключение IllegalReceiveException.

Type Parameters:
T - Тип привязки
Parameters:
buffer - Буфер, в который будут переданы байты
attachment - Объект, который нужно привязать к операции приема; может быть null
handler - Обработчик для обработки уведомлений от стека SCTP, или null чтобы проигнорировать любые уведомления.
Returns:
MessageInfo, null если этот канал находится в режиме неблокирующей работы и нет доступных сообщений или обработчик уведомлений возвращает RETURN после обработки уведомления
Throws:
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал, в то время как операция чтения находится в процессе
ClosedByInterruptException - Если другой поток прерывает текущий поток, в то время как операция чтения находится в процессе, тем самым закрывая канал и устанавливая состояние прерывания текущего потока
NotYetBoundException - Если этот канал еще не привязан
IllegalReceiveException - Если заданный обработчик вызывает метод receive этого канала
SecurityException - Если установлена система безопасности, и она не разрешает принимать новые ассоциации от отправителя сообщения
IOException - Если происходит какая-либо другая ошибка ввода-вывода

отправить

public abstract int send(ByteBuffer buffer, MessageInfo messageInfo) throws IOException
Отправляет сообщение через этот канал.

Если этот канал не привязан, то этот метод вызовет bind(null, 0) перед отправкой каких-либо данных.

Если между сокетом этого канала и предполагаемым получателем, идентифицируемым адресом в переданном messageInfo, нет ассоциации, то она будет автоматически установлена с предполагаемым получателем. Это считается установкой неявной ассоциации. После успешной настройки ассоциации, уведомление association changed будет помещено в стек SCTP с параметром event, установленным в COMM_UP . Это уведомление может быть получено, вызвав receive.

Если этот канал находится в режиме блокировки, и в базовом буфере вывода достаточно места, то оставшиеся байты в данном буфере байтов передаются как единственное сообщение. Отправка сообщения атомарна, если явное завершение сообщения SCTP_EXPLICIT_COMPLETE не включено в сокете этого канала.

Если этот канал находится в режиме без блокировки, в базовом буфере вывода достаточно места, и требуется настройка неявной ассоциации, то оставшиеся байты в данном буфере байтов передаются как единственное сообщение, с учетом SCTP_EXPLICIT_COMPLETE. Если по какой-либо причине сообщение не может быть доставлено, уведомление association changed помещается в стек SCTP с параметром event, установленным в CANT_START.

Сообщение передаётся из буфера байтов, как и в обычной операции write.

Если установлено управление безопасностью, то для каждой новой настройки ассоциации этот метод проверяет, разрешены ли предоставленные адрес и номер порта удалённого узла методом управления безопасностью checkConnect.

Этот метод может быть вызван в любое время. Если другой поток уже инициировал операцию отправки на этом канале, то вызов этого метода будет заблокирован до завершения первой операции.

Parameters:
buffer - Буфер, содержащий отправляемое сообщение
messageInfo - Дополнительные данные об отправляемом сообщении
Returns:
Количество отправленных байтов, которое будет либо количеством оставшихся байтов в буфере сообщений при вызове этого метода, либо, если этот канал неблокирующий, может быть равно нулю, если в базовом буфере вывода не было достаточно места для сообщения
Throws:
InvalidStreamException - Если streamNumber отрицательно, или если ассоциация уже существует, и streamNumber больше максимального количества исходящих потоков
ClosedChannelException - Если этот канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал, пока операция чтения выполняется
ClosedByInterruptException - Если другой поток прерывает текущий поток, пока операция чтения выполняется, тем самым закрывая канал и устанавливая состояние прерывания текущего потока
SecurityException - Если установлено управление безопасностью и оно не разрешает настройку новых ассоциаций с адресом сообщения
IOException - Если произошла какая-либо другая ошибка ввода-вывода

ветвь

public abstract SctpChannel branch(Association association) throws IOException
Ветвление ассоциации.

Приложение может вызвать этот метод, чтобы отделить ассоциацию в отдельный канал. Новый привязанный и подключенный SctpChannel будет создан для ассоциации. Отделенная ассоциация больше не будет частью этого канала.

Это особенно полезно, когда, например, приложение хочет иметь несколько спорадических отправителей/получателей сообщений, остающихся в исходном SCTP-многоканальном, но отделяет ассоциации с высокой интенсивностью потока данных в собственные отдельные SCTP-каналы.

Parameters:
association - Ассоциация для ветвления
Returns:
SctpChannel
Throws:
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла какая-либо другая ошибка ввода-вывода

© 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/jdk.sctp/com/sun/nio/sctp/SctpMultiChannel.html

Spec-Zone.ru

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