MAN connect 2
Материал из Gentoo Linux Wiki
- Вернуться в раздел мануалов
Содержание |
[править] Название
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 устанавливается должным образом.
[править] Ошибки
Ниже следуют только общие ошибки сокетов. Могут также появляться коды ошибок, существующие в конкретном домене.
0.8i 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
[править] Комментарии к man файлу
Hey Emacs! This file is -*- nroff -*- source.
Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
Куски этого руководства извлечены из /usr/include/sys/socket.h, в
котором нет информации об авторстве. Вероятно, этот файл доступен
под GPL.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one
Since the Linux kernel and libraries are constantly changing, this
manual page may be incorrect or out-of-date. The author(s) assume no
responsibility for errors or omissions, or for damages resulting from
the use of the information contained herein. The author(s) may not
have taken the same level of care in the production of this manual,
which is licensed free of charge, as they might when working
professionally.
Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.
Остальные куски из страницы руководства из 6.9 (Berkeley) 3/10/91:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
This product includes software developed by the University of
California, Berkeley and its contributors.
4. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS `AS IS' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Modified Fri Jan 31 16:22:26 1997 by Eric S. Raymond <esr@thyrsus.com>
Modified 1998,1999 by Andi Kleen
$Id: connect.2.in,v 1.3 2000/08/19 15:40:51 alexm Exp $
Дата последней коррекции перевода 11.12.2003
Оригинальный перевод Алексея Махоткина <alexm@hsys.msk.ru> 1999-2001
