Manpages

名 前

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) を 参 照 の こ と 。 ソ ケ ッ ト sockfdSOCK_DGRAM 型 で あ れ ば 、 addr は 、 デ フ ォ ル ト の デ ー タ グ ラ ム の 送 信 先 の ア ド レ ス で あ り 、 デ ー タ グ ラ ム を 受 信 す る 唯 一 の ア ド レ ス を 示 す に 過 ぎ な い 。 ソ ケ ッ ト が SOCK_STREAM 型 も し く は SOCK_SEQPACKET 型 で あ れ ば 、 こ の シ ス テ ム コ ー ル は addr で 指 定 さ れ た ア ド レ ス に 結 び 付 け ら れ た ソ ケ ッ ト に 対 す る 接 続 の 作 成 を 試 み る 。 一 般 的 に 、 接 続 指 向 (connection−oriented) プ ロ ト コ ル で は 一 度 だ け connect() が 成 功 す る 。 コ ネ ク シ ョ ン レ ス (connectionless) プ ロ ト コ ル で は 対 応 を 変 更 す る た め に 何 度 も connect() を 使 用 で き る 。 非 接 続 ソ ケ ッ ト は sockaddrsa_family メ ン バ に AF_UNSPEC を 設 定 す る こ と で 、 接 続 ア ド レ ス の 対 応 を 解 消 す る こ と が で き る (AF_UNSPEC は カ ー ネ ル 2.2 以 降 の Linux で サ ポ ー ト )。

返 り 値

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

エ ラ ー

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

EACCES

UNIX ド メ イ ン ソ ケ ッ ト は パ ス 名 で 識 別 さ れ る 。 ソ ケ ッ ト フ ァ イ ル へ の 書 き 込 み 許 可 が な か っ た か 、 パ ス 名 へ 到 達 す る ま で の デ ィ レ ク ト リ の い ず れ か に 対 す る 検 索 許 可 が な か っ た 。 (path_resolution(7) も 参 照 の こ と )

EACCES, EPERM ソ ケ ッ ト の ブ ロ ー ド キ ャ ス ト フ ラ グ が 有 効 に な っ て い な い の に ユ ー ザ ー が ブ ロ ー ド キ ャ ス ト へ 接 続 を 試 み た 。 ま た は 、 ロ ー カ ル の フ ァ イ ア ウ ォ ー ル の 規 則 に よ り 接 続 の 要 求 が 失 敗 し た 。
EADDRINUSE
ロ ー カ ル ア ド レ ス が 既 に 使 用 さ れ て い る 。
EADDRNOTAVAIL

(イ ン タ ー ネ ッ ト ド メ イ ン ソ ケ ッ ト の 場 合 ) sockfd が 参 照 す る ソ ケ ッ ト が そ れ 以 前 に ア ド レ ス に バ イ ン ド さ れ て お ら ず 、 そ の ソ ケ ッ ト に 一 時 ポ ー ト を バ イ ン ド し よ う と し た 際 に 、 一 時 ポ ー ト と し て 使 用 す る 範 囲 の ポ ー ト 番 号 が す べ て 使 用 中 で あ っ た 。 ip(7)/proc/sys/net/ipv4/ip_local_port_range の 議 論 を 参 照 の こ と 。

EAFNOSUPPORT 渡 さ れ た ア ド レ ス の sa_family フ ィ ー ル ド が 正 し い ア ド レ ス フ ァ ミ リ ー で は な い 。

EAGAIN ル ー テ ィ ン グ キ ャ ッ シ ュ に エ ン ト リ ー が 十 分 に な い 。

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

EBADF フ ァ イ ル デ ィ ス ク リ プ タ ー が デ ィ ス ク リ プ タ ー テ ー ブ ル の 有 効 な イ ン デ ッ ク ス で は な い 。

ECONNREFUSED リ モ ー ト ア ド レ ス で 接 続 を 待 っ て い る プ ロ グ ラ ム が な い 。

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

EINPROGRESS ソ ケ ッ ト が 非 停 止 (nonblocking) に 設 定 さ れ て い て 、 接 続 を す ぐ に 完 了 す る こ と が で き な い 。 そ の 場 合 、 select(2)poll(2) を 使 っ て そ の ソ ケ ッ ト が 書 き 込 み 可 能 に な る の を 待 つ こ と で 、 接 続 の 完 了 を 知 る こ と が で き る 。 select(2) で 書 き 込 み 可 能 に な っ た 後 に 、 getsockopt(2) を 使 っ て SOL_SOCKET レ ベ ル で SO_ERROR オ プ シ ョ ン を 読 み 出 す こ と に よ り 、 connect() が 成 功 し た か 、 失 敗 し た か を 判 断 で き る 。 成 功 の 場 合 SO_ERROR が 0 で あ り 、 失 敗 の 場 合 SO_ERROR が こ こ の リ ス ト に あ る い ず れ か の エ ラ ー コ ー ド で あ り 、 そ れ に よ り 失 敗 の 原 因 が 分 か る 。

EINTR 捕 捉 さ れ た シ グ ナ ル に よ り シ ス テ ム コ ー ル が 中 断 さ れ た 。

signal(7)

参 照 。

EISCONN ソ ケ ッ ト は 既 に 接 続 (connect) さ れ て い る 。
ENETUNREACH
到 達 で き な い ネ ッ ト ワ ー ク で あ る 。
ENOTSOCK
フ ァ イ ル デ ィ ス ク リ プ タ ー が ソ ケ ッ ト と 関 連 付 け ら れ て い な い 。
EPROTOTYPE
ソ ケ ッ ト タ イ プ が 要 求 さ れ た 通 信 プ ロ ト コ ル で は サ ポ ー ト さ れ て い な い 。 こ の エ ラ ー は 、 例 え ば UNIX ド メ イ ン デ ー タ グ ラ ム ソ ケ ッ ト を ス ト リ ー ム ソ ケ ッ ト に 接 続 し よ う と し た 場 合 な ど に 起 こ り 得 る 。
ETIMEDOUT
接 続 を 試 み て い る 途 中 で 時 間 切 れ (timeout) に な っ た 。 サ ー バ ー が 混 雑 し て い て 新 た な 接 続 を 受 け 入 れ ら れ な い の か も し れ な い 。 IP ソ ケ ッ ト で は 、 syncookie が サ ー バ ー で 有 効 に な っ て い る 場 合 、 タ イ ム ア ウ ト が 非 常 に 長 く な る 場 合 が あ る の で 注 意 す る こ と 。

準 拠

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/ に 書 か れ て い る 。