Инициализировать соединение на сокете (без блокировки)
#include <sys/socket.h>int nbaconnect( int s,const struct sockaddr *name,size_t namelen );
SOCK_STREAM
.libsocket
Функция nbaconnect() вызывается вместо connect(), для предотвращения неблокирующего connect() от блокирования во время autoconnect (см. /etc/autoconnect).
При использовании autoconnect, connect() может заблокировать приложение, ожидая завершения autoconnect; nbaconnect() позволяет приложению продолжать выполнение во время autoconnect.
Функция nbaconnect() принимает на вход те же аргументы, что и connect(), однако эти функции отличаются по возвращаемому значению, когда требуется autoconnect. Если требуется autoconnect, возвращается дескриптор файла (fd). fd используется в вызове nbaconnect_result() для получения ошибки, связанной с autoconnect и попыткой подключения.
Поскольку nbaconnect_result() - это блокирующий вызов, рекомендуется сначала вызвать select() для определения наличия доступных данных в однонаправленном канале данных. |
При наличии доступных данных, следует вызвать nbaconnect_result() для полученя статуса попытки nbaconnect().
Если autoconnect не обязателен, nbaconnect() возвращает -1
и ведет себя аналогично connect() для неблокирующих сокетов (например, если вернулось -1
и errno is установлено в EINPROGRESS
, возможен вызов select() для завершения путем выбора сокета для записи).
Дескриптор файла, который можно передать в nbaconnect_result(), чтобы получить результат попытки nbaconnect().
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
Любое значение из раздела "Ошибки" в connect(), а также:
ЗОСРВ «Нейтрино»
Менеджер pipe() должен быть доступен.
accept(), bind(), connect(), errno, fcntl(), getsockname(), nbaconnect_result(), open(), pipe(), read(), select(), socket(), write()
/etc/autoconnect, pipe в Справочнике по Утилитам.
Предыдущий раздел: Описание API сетевой библиотеки