nbaconnect()

Инициализировать соединение на сокете (без блокировки)

Прототип:

#include <sys/socket.h>
int nbaconnect( int s,
const struct sockaddr *name,
size_t namelen );

Аргументы:

s
Дескриптор сокета, к которому следует инициировать соединение.
name
Имя сокета, к которому нужно подключиться для соединения SOCK_STREAM.
namelen
Длина name в байтах.

Библиотека:

libsocket

Описание:

Функция nbaconnect() вызывается вместо connect(), для предотвращения неблокирующего connect() от блокирования во время autoconnect (см. /etc/autoconnect).

При использовании autoconnect, connect() может заблокировать приложение, ожидая завершения autoconnect; nbaconnect() позволяет приложению продолжать выполнение во время autoconnect.

Функция nbaconnect() принимает на вход те же аргументы, что и connect(), однако эти функции отличаются по возвращаемому значению, когда требуется autoconnect. Если требуется autoconnect, возвращается дескриптор файла (fd). fd используется в вызове nbaconnect_result() для получения ошибки, связанной с autoconnect и попыткой подключения.


Note: Поскольку nbaconnect_result() - это блокирующий вызов, рекомендуется сначала вызвать select() для определения наличия доступных данных в однонаправленном канале данных.

При наличии доступных данных, следует вызвать nbaconnect_result() для полученя статуса попытки nbaconnect().

Если autoconnect не обязателен, nbaconnect() возвращает -1 и ведет себя аналогично connect() для неблокирующих сокетов (например, если вернулось -1 и errno is установлено в EINPROGRESS, возможен вызов select() для завершения путем выбора сокета для записи).

Возвращаемое значение:

Дескриптор файла, который можно передать в nbaconnect_result(), чтобы получить результат попытки nbaconnect().

Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

Любое значение из раздела "Ошибки" в connect(), а также:

EINVAL
Передаваемый дескриптор файла сокета не является неблокирующим.

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Предостережения:

Менеджер pipe() должен быть доступен.

Тематические ссылки:

accept(), bind(), connect(), errno, fcntl(), getsockname(), nbaconnect_result(), open(), pipe(), read(), select(), socket(), write()

/etc/autoconnect, pipe в Справочнике по Утилитам.




Предыдущий раздел: Описание API сетевой библиотеки