CONNECT(2) | Linux Programmer's Manual | CONNECT(2) |
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 で指定されたアドレスに結び付けられたソケットに対する接続の 作成を試みる。
一般的に、接続指向 (connection-oriented) プロトコルでは一度だけ connect() が成功する。 コネクションレス (connectionless) プロトコルでは対応を変更するために何度も connect() を使用できる。 非接続ソケットは sockaddr の sa_family メンバに AF_UNSPEC を設定することで、接続アドレスの対応を解消することができる (AF_UNSPEC はカーネル 2.2 以降の Linux でサポート)。
接続または対応づけに成功するとゼロを返す。 失敗すると -1 を返し、 errno に適切な値を設定する。
以下は一般的なソケットについてのエラーである。他にドメイン特有のエラー が発生する可能性がある。
SVr4, 4.4BSD, (connect() 関数は 4.2BSD で最初に登場した), POSIX.1-2001.
POSIX.1-2001 では <sys/types.h> のインクルードは必須とされておらず、 Linux ではこのヘッダーファイルは必要ではない。 しかし、歴史的には、いくつかの実装 (BSD 系) でこのヘッダーファイルが 必要であり、移植性が必要なアプリケーションではこのファイルを インクルードするのが賢明であろう。
connect() の三番目の引き数は 4.x BSD や libc4, libc5 と同様に実際には int である。 POSIX では紆余曲折を経て現在の socklen_t になっており、 glibc でも socklen_t を使っている。 accept(2) も参照のこと。
connect() が失敗した場合、そのソケットの状態は不定だと考えること。 移植性を考慮したアプリケーションでは、そのソケットをクローズし、再接続用に新しいソケットを作成すべきである。
connect() の利用例が getaddrinfo(3) に記載されている。
accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2014-09-06 | Linux |