CONNECT(2)

名称
connect - ソケット上で接続を開始する

ライブラリ
libc

書式
<sys/types.h> <sys/socket.h> int connect(int s, const struct sockaddr *name, socklen_t namelen)

解説
s 引数はソケットです。 このタイプが SOCK_DGRAM の場合、この呼び出しはソケットが結び付けられる 通信相手を指定します。 このアドレスは送信データグラムの送信先であり、 受信データグラムの送信元となる唯一のアドレスです。 ソケットのタイプが SOCK_STREAM の場合、この呼び出しは通信相手のソケットに接続を確立 しようとします。 通信相手のソケットは name で指定されます。 name はソケット通信空間内のアドレスです。 各通信空間は name 引数を独自の方法で解釈します。 一般に、ストリームソケットが正常に connect() できるのは 1 回だけです。 データグラムソケットは connect() を複数回使用してその結び付けを変更できます。 データグラムソケットは、NULL アドレスのような無効なアドレスに 接続することによって結び付けを解除できます。

戻り値

エラー
connect() システムコールは次の場合に失敗します:

[EBADF]
    s 引数が有効な記述子でありません。

[ENOTSOCK]
    s 引数がソケットではなくファイルの記述子です。

[EADDRNOTAVAIL]
    指定のアドレスがこのマシンでは利用できません。

[EAFNOSUPPORT]
    指定のアドレスファミリ内のアドレスがこのソケットでは使用できません。

[EISCONN]
    ソケットは既に接続されています。

[ETIMEDOUT]
    接続を確立することなく、タイムアウトしました。

[ECONNREFUSED]
    接続が強制的に拒絶されました。

[ENETUNREACH]
    このホストからそのネットワークに到達できません。

[EHOSTUNREACH]
    このホストからそのリモートホストに到達できません。

[EADDRINUSE]
    アドレスが既に使用中です。

[EFAULT]
    name 引数はプロセスアドレス空間の外側の領域を指定しています。

[EINPROGRESS]
    非ブロッキングのソケットで、接続がすぐには確立できませんでした。 ソケットへの書込みを select(2) で待つことによって、接続完了を待つことができます。

[EINTR]
    接続の試みは、シグナルの配信により割り込まれました。 その接続は EINPROGRESS の場合と同じようにバックグラウンドで確立されます。

[EALREADY]
    前の接続の試みが未だ完了していません。

[EACCES]
    ブロードキャストの機能を提供していないソケットを通して、 (INADDR_BROADCAST 定数または INADDR_NONE 戻り値を通して獲得した) ブロードキャストアドレスに接続しようとしています。

以降のエラーは、UNIX ドメインの接続名に固有です。 これらのエラーは、UNIX IPC ドメインの将来の バージョンには適用されない可能性があります。

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    指定のソケットが存在しません。

[EACCES]
    指定されたパスには、検索が許可されていないディレクトリが含まれています。

[EACCES]
    指定のソケットへの書込みアクセスが拒絶されています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

関連項目
accept(2), getpeername(2), getsockname(2), select(2), socket(2)

歴史
connect() システムコールは 4.2BSD で登場しました。