EN JA
CONNECT(2)
CONNECT(2) FreeBSD System Calls Manual CONNECT(2)

名称

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

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < 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 アドレスのような無効なアドレスに接続することによって結び付けを解除できます。

戻り値

The connect() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

connect() システムコールは、次の場合に失敗します:
[ EBADF]
s 引数が有効な記述子でありません。
[ ENOTSOCK]
s 引数がソケットではなくファイルの記述子です。
[ EADDRNOTAVAIL]
指定のアドレスがこのマシンでは利用できません。
[ EAFNOSUPPORT]
指定のアドレスファミリ内のアドレスがこのソケットでは使用できません。
[ EISCONN]
ソケットは、既に接続されています。
[ ETIMEDOUT]
接続を確立することなく、タイムアウトしました。
[ ECONNREFUSED]
接続が強制的に拒絶されました。
[ ECONNRESET]
接続がリモートホストによってリセットされました。
[ ENETUNREACH]
このホストからそのネットワークに到達できません。
[ EHOSTUNREACH]
このホストからそのリモートホストに到達できません。
[ EADDRINUSE]
アドレスが既に使用中です。
[ EFAULT]
name 引数は、プロセスアドレス空間の外側の領域を指定しています。
[ EINPROGRESS]
非ブロッキングのソケットで、接続がすぐには確立できませんでした。ソケットへの書み込みを select(2) で待つことによって、接続完了を待つことができます。
[ EINTR]
接続の試みは、シグナルの配信により割り込まれました。その接続は、 EINPROGRESS の場合と同じようにバックグラウンドで確立されます。
[ EALREADY]
前の接続の試みが未だ完了していません。
[ EACCES]
ブロードキャストの機能を提供していないソケットを通して、 ( INADDR_BROADCAST 定数または INADDR_NONE 戻り値を通して獲得した) ブロードキャストアドレスに接続しようとしています。
[ EAGAIN]
自動的に割り当てられたポート番号が要求されましたが、自動的に割り当てられたポートが利用可能ではありません。 sysctl(3) MIB 変数 net.inet.ip.portrange.firstnet.inet.ip.portrange.last によって指定されたポートの範囲を増加させることが、問題を軽減するかもしれません。

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

[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
指定のソケットが存在しません。
[ EACCES]
指定されたパスには、検索が許可されていないディレクトリが含まれています。
[ EACCES]
指定のソケットへの書み込みアクセスが拒絶されています。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。

歴史

connect() システムコールは、 4.2BSD で登場しました。
September 5, 2010 FreeBSD