> Linux Reviews > man >

connect


  1. connect.2.man


1. connect.2.man

Manpage of CONNECT

CONNECT

Section: Руководство программиста Linux (2)
Updated: 2008-12-03
Index Return to Main Contents
 

ИМЯ

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

ОБЗОР

#include <sys/types.h>          /* Смотрите ЗАМЕЧАНИЯ */

#include <sys/socket.h> int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
 

ОПИСАНИЕ

Системный вызов connect() устанавливает соединение с сокетом, заданным файловый дескриптором sockfd, ссылающимся на адрес addr. Аргумент addrlen определяет размер addr. Формат адреса в addr определяется адресным пространством сокета sockfd; подробнее можно узнать в socket(2).

Если сокет sockfd имеет тип SOCK_DGRAM, то адрес addr является адресом по умолчанию, куда посылаются датаграммы, и единственным адресом, откуда они принимаются. Если сокет имеет тип SOCK_STREAM или SOCK_SEQPACKET, то данный системный вызов попытается установить соединение с другим сокетом, заданным параметром addr.

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

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

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

ОШИБКИ

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

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

SVr4, 4.4BSD, (функция connect() впервые появилась в 4.2BSD), POSIX.1-2001.  

ЗАМЕЧАНИЯ

В POSIX.1-2001 не требуется включение <sys/types.h>, и этот заголовочный файл не требуется в Linux. Однако, некоторые старые (BSD) реализации требуют данный файл, и в переносимых приложениях для предосторожности, вероятно, он будет включён.

Третий аргумент connect() в действительности имеет тип int (а в 4.x BSD, libc4 и libc5 это так и есть). Некоторый беспорядок POSIX сказавшийся на настоящей socklen_t, также используется в glibc. См. также accept(2).  

ПРИМЕР

Пример использования connect() показан в getaddrinfo(3).  

СМОТРИТЕ ТАКЖЕ

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


 

Index

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

This document was created by man2html using the manual pages.
Time: 17:41:12 GMT, October 23, 2013

SVENSKA - cs - SVENSKA - SVENSKA - SVENSKA - ja - pl