CONNECT(2)

名前
connect - ソケットの接続を行なう

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

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

説明
パラメーター sockfd は、ソケットである。 ソケットが SOCK_DGRAM 型の場合、このシステム・コールはソケットが対応づけられる相手を 特定する。 このアドレスはデータグラムを送信するアドレスであり、 このアドレスからのデータグラムのみを受信する。 ソケットが SOCK_STREAM 型の場合、このシステムコールは別のソケットとの接続を確立しようと 試みる。 相手のソケットは serv_addr で指定する。 serv_addr はソケットの通信ドメインのアドレスである。 個々の通信ドメインは独自の方法でパラメーター serv_addr を解釈する。 一般的に、ストリーム・ソケットは一度だけ connect が成功する。 データグラム・ソケットは対応を変更するために何度も connect を使用できる。 データグラム・ソケットは NULL アドレスのような無効なアドレスに 接続することによって対応づけを解消することができる。

返り値
接続または対応づけに成功するとゼロを返す。 失敗すると -1 を返し、 errno に適切な値を設定する。

エラー
以下は一般的なソケットについてのエラーである。他にドメイン特有のエラー が発生する可能性がある。

EBADF
    ディスクリプターが不正である。

EFAULT
    ソケット構造体のアドレスがユーザーのアドレス空間の外にある。

ENOTSOCK
    ディスクリプターがソケットでない。

EISCONN
    ソケットは既に接続(connect)されている。

ECONNREFUSED
    サーバーによって接続が拒否された。

ETIMEDOUT
    接続を試みている途中で時間切れ(timeout)になった。

ENETUNREACH
    ネットワークが到達できない。

EADDRINUSE
    アドレスが既に使用されている。

EINPROGRESS
    ソケットが非停止(non-blocking)に設定されていて、接続がすぐに完了しない。 ソケットへの書き込みを待つことにより、接続の完了に select(2) を使用することができる。select で書き込み可能になった後に getsockopt(2) で SOL_SOCKET レベルで SO_ERROR オプションを読み出すこ とにより、connect に成功した(SO_ERRORがゼロ)か、 失敗した(SO_ERROR が上記のエラーコードのどれかで失敗の原因を示す) かを決定できる。

EALREADY
    ソケットが非停止(non-blocking)に設定されており、以前の接続が完了していない。

準拠
SVr4, 4.4BSD ( connect 関数は BSD 4.2 で最初に現われた)。 SVr4 には他に一般的なエラー・コードとして、 EADDRNOTAVAIL, EINVAL, EAFNOSUPPORT, EALREADY, EINTR, EPROTOTYPE, ENOSR についての記述がある。またここで言及されていない多くのエラー状態について 記述がある。

関連項目
accept(2), bind(2), listen(2), socket(2), getsockname(2)