Scroll to navigation

CONNECT(2) Linux - příručka programátora CONNECT(2)

JMÉNO

connect - inicializuj spojení soketu

SYNTAXE

#include <sys/types.h> /* Viz POZNÁMKY*/
#include <sys/socket.h>

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

POPIS

Systémové volání connect() připojí soket specifikovaný v sockfd k adrese specifikované v serv_addr. Parametr addrlen udává velikost serv_addr. Formát adresy v serv_addr je dán adresovým prostorem deskriptoru v sockfd. Viz socket(2) pro více detailů.

Parametr sockfd je soket. Je-li jeho typ SOCK_DGRAM, pak je serv_addr jediným místem, odkud a kam budou přijímány, resp. posílány datagramy. Je-li typ soketu SOCK_STREAM , nebo SOCK_SEQPACKET potom se toto volání pokusí navázat spojení se soketem, který je specifikován v serv_addr , což je adresa v jmenném prostoru soketu. Každý jmenný prostor interpretuje adresu v serv_addr.

Obecně se mohou protokolové sokety úspěšně spojit pouze jednou; datagramové sokety mohou použít volání connect vícekrát. Datagramové sokety mohou zrušit asociovaný soket tak, že se pokusí spojit s adresou z sa_family z sockaddr nastavenou na AF_UNSPEC (podporováno od linuxového jádra 2.2).

NÁVRATOVÁ HODNOTA

Je-li spojení navázáno, je vrácena 0, jinak -1 a externí proměnná errno je příslušně nastavena.

CHYBY

Tento seznam je pouze všeobecný. Mohou existovat další specifické chyby pro použitý jmenný prostor.

Pro sokety unixové domény, které jsou identifikovány jménem: je odmítnuto zapisování do souboru specifikovaného soketem, nebo je odmítnuto právo vyhledávat v adresářích specifikovaných cestou. (Viz path_resolution(7).)
Uživatel se pokusil připojit k broadcastové adrese, aniž by měl povolen broadcastový příznak na soketu, nebo požadavek na spojení byl odmítnut kvůli lokálnímu pravidlu firewallu.
Poskytnutá adresa nemá správně specifikovanou rodinu adres v poli sa_family.
Nejsou volné žádné lokální porty, nebo jsou nedostatečné záznamy v cache směrovače. Pro AF_INET viz net.ipv4.ip_local_port_range v ip(7) ,jak zvýšit počet lokálních portů.
Soket je neblokující a spojení nemůže být okamžitě dokončeno. Viz select(2) nebo poll(2).
Timeout při pokusu o navázání spojení. Server může být příliš zaneprázdněn a není schopen přijmou další spojení. Vězte, že pro IP sokety může být timeout velmi dlouhý, pokud jsou syncookies povoleny na straně serveru.
Systémové volání bylo přerušeno doručením signálu. Viz signal(7).
Soket je neblokující a předchozí pokus o spojení ještě nebyl dokončen.
Špatný deskriptor.
Adresa soketu je mimo adresový prostor procesu.
Deskriptor není platným deskriptorem soketu.
Soket je již spojen.
Spojení bylo serverem odmítnuto.
Časový limit pro spojení vypršel.
Síť není dosažitelná.
Adresa je již používána.

SPLŇUJE STANDARDY

SVe4, 4.4BSD, (funkce connect() se poprvé objevila ve 4.2BSD), POSIX.1-2001.

POZNÁMKY

POSIX.1-2001 nevyžaduje vložení <sys/types.h> a ani na Linuxu není tento soubor vyžadován. Nicméně některé starší (BSD) implementace tento hlavičkový soubor vyžadují a v přenositelných aplikacích by tedy měl být vložen.

Třetí argument connect()je ve skutečnosti int(v BSD4.X a libc4 a libc5). Některé zmatky v normě POSIX vyústily v přítomnost socklen_t používaném také v glibc. Viz accept(2).

PŘÍKLAD

Příklad použití connect() je v getaddrinfo(3).

DALŠÍ INFORMACE

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

TIRÁŽ

Tato stránka je součástí projektu Linux man-pages. Popis projektu a informace o hlášení chyb najdete na http://www.kernel.org/doc/man-pages/.

25. září 2009 Linux 0.99.11