Класс 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

Конструкторы

Модификатор Конструктор Описание
protected SctpMultiChannel​(SelectorProvider provider)

Инициализирует новый экземпляр этого класса.

Методы

Модификатор и тип Метод Описание
abstract Set<Association> associations()

Возвращает открытые ассоциации в сокете этого канала.

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)

Удаляет указанный адрес из привязанных адресов для сокета канала.

int validOps()

Возвращает набор операций, определяющий поддерживаемые операции этого канала.

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

configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register

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

blockingLock, isBlocking, isRegistered, keyFor, register

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

begin, close, end

Методы, объявленные в классе 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, удаляются из набора ассоциаций.

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

Возвращает:
Коллекцию 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 - Тип значения параметра сокета
Параметры:
name - Параметр сокета
association - Ассоциация, чьё значение параметра необходимо получить, или null, если этот параметр должен быть получен на уровне сокета канала.
Возвращает:
Значение параметра сокета. Значение null может быть допустимым значением для некоторых параметров сокета.
Выбрасывает:
UnsupportedOperationException - Если параметр сокета не поддерживается этим каналом
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла ошибка ввода-вывода
См. также:
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 в классе 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.

Параметры:
association - Ассоциация, которую нужно отделить
Возвращает:
SctpChannel
Исключения:
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла какая-либо другая ошибка ввода-вывода

© 1993, 2020, 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/11/docs/api/jdk.sctp/com/sun/nio/sctp/SctpMultiChannel.html

Spec-Zone .ru
спецификации, руководства, описания, API