The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

connect ()
  • connect (2) ( FreeBSD man: Системные вызовы )
  • >> connect (2) ( Русские man: Системные вызовы )
  • connect (2) ( Linux man: Системные вызовы )
  • connect (3) ( Solaris man: Библиотечные вызовы )
  • connect (3) ( POSIX man: Библиотечные вызовы )
  • Ключ connect обнаружен в базе ключевых слов.
  •  

    НАЗВАНИЕ

    connect - инициирует соединение на сокете  

    ОБЗОР

    #include <sys/types.h>
    #include <sys/socket.h>

    int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);  

    ОПИСАНИЕ

    Файловый дескриптор sockfd должен ссылаться на сокет. Если сокет имеет тип SOCK_DGRAM, значит, адрес serv_addr является адресом по умолчанию, куда посылаются датаграммы, и единственным адресом, откуда они принимаются. Если сокет имеет тип SOCK_STREAM или SOCK_SEQPACKET, то данный системный вызов попытается установить соединение с другим сокетом. Другой сокет задан параметром serv_addr, являющийся адресом длиной addrelen в пространстве коммуникации сокета. Каждое пространство коммуникации интерпретирует параметр serv_addr по-своему.

    Обычно сокеты с протоколами, основанными на соединении, могут устанавливать соединение только один раз; сокеты с протоколами без соединения могут использовать connect многократно, чтобы изменить адрес назначения. Сокеты без поддержки соединения могут прекратить связь с другим сокетом, установив член sa_family структуры sockaddr в AF_UNSPEC.  

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

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

    ОШИБКИ

    Ниже следуют только общие ошибки сокетов. Могут также появляться коды ошибок, существующие в конкретном домене.
    EBADF
    Файловый дескриптор не является правильными индексом в таблице дескрипторов.
    EFAULT
    Адрес структуры сокета находится за пределами адресного пространства пользователя.
    ENOTSOCK
    Файловый дескриптор не связан с сокетом.
    EISCONN
    Соединение на сокете уже произошло.
    ECONNREFUSED
    С той стороны никто не слушает.
    ETIMEDOUT
    Произошел тайм-аут во время ожидания соединения. Сервер, возможно, очень занят и не может принимать новые соединения. Заметьте, что для IP-сокетов тайм-аут может быть очень длинным, если на сервере разрешено использование syncookies.
    ENETUNREACH
    Сеть недоступна.
    EADDRINUSE
    Локальный адрес уже используется.
    EINPROGRESS
    Сокет является неблокирующим, а соединение не может быть установлено прямо сейчас. Можно использовать select(2) или poll(2), чтобы закончить соединение, установив ожидание возможности записи в сокет. После того, как select сообщит о такой возможности, используйте getsockopt(2), чтобы прочитать флаг SO_ERROR на уровне SOL_SOCKET, чтобы определить, успешно ли завершился connect (в этом случае SO_ERROR равен нулю) или неуспешно, тогда SO_ERROR равен одному из обычных кодов ошибок, перечисленных здесь, и объясняет причину неудачи).
    EALREADY
    Сокет является неблокирующим, а предыдущая попытка установить соединение еще не завершилась.
    EAGAIN
    Не осталось свободных локальных портов, или же недостаточно места в кэше маршрутизации. Для домена PF_INET смотри описание системной переменной net.ipv4.ip_local_port_range в ip(7), где описано, как увеличить количество локальных портов.
    EAFNOSUPPORT
    Адрес имеет некорректную семью адресов в поле sa_family.
    EACCES, EPERM
    Пользователь попытался соединиться с широковещательным адресом, не установив широковещательный флаг на сокете или же запрос на соединение завершился неуспешно из-за локального правила на файерволле.
     

    СООТВЕТСТВИЕ СТАНДАРТАМ

    SVr4, 4.4BSD (функция connect впервые появилась в BSD 4.2). SVr4 документирует дополнительные общие коды ошибок EADDRNOTAVAIL, EINVAL, EAFNOSUPPORT, EALREADY, EINTR, EPROTOTYPE, и ENOSR. Там также документируется множество дополнительных кодов ошибок, не описанных здесь.  

    ЗАМЕЧАНИЕ

    Третий аргумент connect в действительности имеет тип int (а в BSD 4.*, libc4 и libc5 это так и есть). Определенное недопонимание привело к появлению socklen_t. Черновик стандарта еще не принят, но glibc2 уже следует ему и в ней присутствует socklen_t. Смотри также accept(2).  

    ОШИБКИ

    Прекращение соединения на сокете с помощью вызова connect с адресом AF_UNSPEC еще не реализовано.  

    СМОТРИ ТАКЖЕ

    accept(2), bind(2), listen(2), socket(2), getsockname(2)  

    ПЕРЕВОД

    Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999


     

    Index

    НАЗВАНИЕ
    ОБЗОР
    ОПИСАНИЕ
    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
    ОШИБКИ
    СООТВЕТСТВИЕ СТАНДАРТАМ
    ЗАМЕЧАНИЕ
    ОШИБКИ
    СМОТРИ ТАКЖЕ
    ПЕРЕВОД


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру