Spec-Zone.ru › OpenJDK 17

Класс 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 - Если возникает какая-либо другая ошибка ввода-вывода

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 - Параметр сокета
association - Ассоциация, параметр которой должен быть установлен, или null если этот параметр должен быть установлен на уровне сокета канала.
value - Значение параметра сокета. Значение 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 in class 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 - Если произошла какая-либо другая ошибка ввода-вывода

send

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 - Если произошла другая ошибка ввода-вывода

branch

public abstract SctpChannel branch(Association association) throws IOException
Создаёт ветвь ассоциации.

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

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

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

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

Spec-Zone.ru

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