Man page - socket(2)

Packages contains this manual

Available languages:

en fr tr ja ru zh_TW zh_CN de

Manual

SOCKET

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意

関 連 項 目
こ の 文 書 に つ い て

名 前

socket - 通 信 の た め の 端 点 (endpoint) を 作 成 す る

書 式

#include <sys/types.h> /* 「 注 意 」 参 照 */
#include <sys/socket.h>

int socket(int domain , int type , int protocol );

説 明

socket () creates an endpoint for communication and returns a file descriptor that refers to that endpoint. The file descriptor returned by a successful call will be the lowest-numbered file descriptor not currently open for the process.

domain 引 数 は 通 信 を 行 な う ド メ イ ン を 指 定 す る ; こ れ は ど の プ ロ ト コ ル フ ァ ミ リ ー (protocol family) を 通 信 に 使 用 す る か を 指 定 す る 。 こ れ ら の フ ァ ミ リ ー は <sys/socket.h> に 定 義 さ れ て い る 。 現 在 カ ー ネ ル が 理 解 で き る フ ォ ー マ ッ ト は 以 下 の 通 り 。

Image grohtml-8781-1.png

Further details of the above address families, as well as information on several other address families, can be found in address_families (7).

ソ ケ ッ ト は type で 指 定 さ れ る 型 を 持 ち 、 そ れ は 通 信 方 式 (semantics) を 指 定 す る 。 定 義 さ れ て い る 型 は 現 在 以 下 の 通 り 。

SOCK_STREAM

順 序 性 と 信 頼 性 が あ り 、 双 方 向 の 、 接 続 さ れ た バ イ ト ス ト リ ー ム (byte stream) を 提 供 す る 。 帯 域 外 (out-of-band) デ ー タ 転 送 メ カ ニ ズ ム も サ ポ ー ト さ れ る 。

SOCK_DGRAM

デ ー タ グ ラ ム (コ ネ ク シ ョ ン レ ス 、 信 頼 性 無 し 、 固 定 最 大 長 メ ッ セ ー ジ ) を サ ポ ー ト す る 。

SOCK_SEQPACKET

固 定 最 大 長 の デ ー タ グ ラ ム 転 送 パ ス に 基 づ い た 順 序 性 、 信 頼 性 の あ る 双 方 向 の 接 続 に 基 づ い た 通 信 を 提 供 す る 。 受 け 取 り 側 で は そ れ ぞ れ の 入 力 シ ス テ ム コ ー ル で パ ケ ッ ト 全 体 を 読 み 取 る こ と が 要 求 さ れ る 。

SOCK_RAW

生 の ネ ッ ト ワ ー ク プ ロ ト コ ル へ の ア ク セ ス を 提 供 す る 。

SOCK_RDM

信 頼 性 は あ る が 、 順 序 は 保 証 し な い デ ー タ グ ラ ム 層 を 提 供 す る 。

SOCK_PACKET

廃 止 さ れ て お り 新 し い プ ロ グ ラ ム で 使 用 し て は い け な い 。 packet (7) を 参 照 す る こ と

あ る 種 の ソ ケ ッ ト 型 が 全 て の プ ロ ト コ ル フ ァ ミ リ ー で 実 装 さ れ て い る わ け で は な い 。

Linux 2.6.27 以 降 で は 、 type 引 数 は 二 つ 目 の 目 的 に も 使 用 さ れ る 。 ソ ケ ッ ト の 型 を 指 定 す る の に 加 え て 、 以 下 の 値 の い く つ か を ビ ッ ト 単 位 の 論 理 和 (OR) で 指 定 す る こ と で 、 socket () の 振 舞 い を 変 更 す る こ と が で き る 。

SOCK_NONBLOCK

Set the O_NONBLOCK file status flag on the open file description (see open (2)) referred to by the new file descriptor. Using this flag saves extra calls to fcntl (2) to achieve the same result.

SOCK_CLOEXEC

新 し い フ ァ イ ル デ ィ ス ク リ プ タ ー に 対 し て close-on-exec ( FD_CLOEXEC ) フ ラ グ を セ ッ ト す る 。 こ の フ ラ グ が 役 に 立 つ 理 由 に つ い て は 、 open (2) の O_CLOEXEC フ ラ グ の 説 明 を 参 照 の こ と 。

protocol は ソ ケ ッ ト に よ っ て 使 用 さ れ る 固 有 の プ ロ ト コ ル を 指 定 す る 。 通 常 そ れ ぞ れ の ソ ケ ッ ト は 、 与 え ら れ た プ ロ ト コ ル フ ァ ミ リ ー の 種 類 ご と に 一 つ の プ ロ ト コ ル の み を サ ポ ー ト す る 。 そ の 場 合 は protocol に 0 を 指 定 で き る 。 し か し 、 多 く の プ ロ ト コ ル が 存 在 し て も か ま わ な い 。 こ の 場 合 に は こ の 方 法 に よ り 固 有 の プ ロ ト コ ル を 指 定 す る 必 要 が あ る 。 使 用 さ れ る プ ロ ト コ ル 番 号 は 通 信 の 行 な わ れ る “通 信 ド メ イ ン ”に 固 有 で あ る ; protocols (5) を 参 照 す る こ と 。 プ ロ ト コ ル 名 を ど う や っ て プ ロ ト コ ル 番 号 に 対 応 さ せ る か に つ い て は getprotoent (3) を 参 照 す る こ と 。

SOCK_STREAM 型 の ソ ケ ッ ト は 全 二 重 バ イ ト ス ト リ ー ム で あ る 。 こ れ ら は レ コ ー ド 境 界 を 保 存 し な い 。 ス ト リ ー ム は 、 ソ ケ ッ ト が デ ー タ を 送 っ た り 受 け た り す る 前 に 接 続 さ れ た 状 態 に な っ て な け れ ば な ら な い 。 他 の ソ ケ ッ ト へ の 接 続 は connect (2) コ ー ル に よ っ て 行 な わ れ る 。 一 度 接 続 し た ら デ ー タ は read (2) と write (2) コ ー ル や send (2) と recv (2) コ ー ル の 変 種 を 使 用 し て 転 送 で き る 。 セ ッ シ ョ ン が 完 了 し た ら close (2) が 行 な わ れ る 。 帯 域 外 デ ー タ の 転 送 も send (2) に 記 述 さ れ て お り 、 受 信 も recv (2) に 記 述 さ れ て い る 。

SOCK_STREAM を 実 装 し た 通 信 プ ロ ト コ ル は デ ー タ に 損 失 や 重 複 が な い こ と を 保 証 す る 。 も し 相 手 の プ ロ ト コ ル が バ ッ フ ァ ー 空 間 を 持 つ デ ー タ の 断 片 を 適 当 な 時 間 の う ち に 転 送 で き な け れ ば 、 接 続 は 断 た れ た と み な す 。 そ の ソ ケ ッ ト SO_KEEPALIVE が 有 効 に な っ て い る 場 合 、 プ ロ ト コ ル 独 自 の 方 法 で 接 続 の 相 手 側 が ま だ 有 効 で あ る か を チ ェ ッ ク す る 。 も し プ ロ セ ス が 、 壊 れ た ス ト リ ー ム で デ ー タ を 送 受 信 し よ う と し た 場 合 に は SIGPIPE シ グ ナ ル が 送 ら れ る ; こ れ は 通 常 の そ の シ グ ナ ル を 扱 っ て い な い プ ロ セ ス を 終 了 さ せ る 。 SOCK_SEQPACKET ソ ケ ッ ト は SOCK_STREAM ソ ケ ッ ト と 同 じ シ ス テ ム コ ー ル を 使 用 す る 。 唯 一 の 違 い は read (2) コ ー ル が 要 求 さ れ た 量 の デ ー タ の み を 返 し 、 到 着 し た パ ケ ッ ト の 残 り の 部 分 を 捨 て て し ま う こ と で あ る 。 同 様 に 入 っ て く る デ ー タ グ ラ ム の 全 て の メ ッ セ ー ジ 境 界 は 保 存 さ れ る 。

SOCK_DGRAM SOCK_RAW ソ ケ ッ ト は sendto (2) コ ー ル で 指 定 さ れ た 相 手 へ デ ー タ グ ラ ム を 送 る こ と が 許 さ れ て い る 。 デ ー タ グ ラ ム は 一 般 に recvfrom (2) で 受 け と り 、 こ の コ ー ル は 次 の デ ー タ グ ラ ム を 送 信 者 の ア ド レ ス と 一 緒 に 返 す 。

SOCK_PACKET は 古 い ソ ケ ッ ト 型 で 、 生 (raw)の パ ケ ッ ト を デ バ イ ス ド ラ イ バ か ら 直 接 受 信 す る た め の も の で あ る 。 今 は 代 わ り に packet (7) を 用 い る こ と 。

fcntl (2) の F_SETOWN 操 作 を 使 っ て 、 シ グ ナ ル SIGURG SIGPIPE を 受 け と る プ ロ セ ス グ ル ー プ を 指 定 で き る 。 SIGURG シ グ ナ ル は 帯 域 外 デ ー タ が 到 着 し た 時 に 、 SIGPIPE シ グ ナ ル は SOCK_STREAM 接 続 が 予 期 せ ず 切 断 さ れ た 時 に 送 ら れ る 。 ま た 、 F_SETOWN 操 作 は 、 I/O や I/O イ ベ ン ト の 非 同 期 (asynchronous) 通 知 を SIGIO を 経 由 で 受 け 取 る プ ロ セ ス や プ ロ セ ス グ ル ー プ を 設 定 す る の に も 使 用 で き る 。 F_SETOWN を 使 用 す る こ と は FIOSETOWN ま た は SIOCSPGRP の 引 数 で ioctl (2) を 使 用 す る こ と と 等 価 で あ る 。

ネ ッ ト ワ ー ク が プ ロ ト コ ル モ ジ ュ ー ル に エ ラ ー 状 態 を 伝 え た 場 合 (例 え ば 、 IP の ICMP メ ッ セ ー ジ を 使 用 し て )に は 、 ソ ケ ッ ト の ペ ン デ ィ ン グ エ ラ ー フ ラ グ が 設 定 さ れ る 。 次 に こ の ソ ケ ッ ト を 操 作 し た 時 に ペ ン デ ィ ン グ さ れ て い た エ ラ ー コ ー ド が 返 さ れ る 。 プ ロ ト コ ル に よ っ て は エ ラ ー に つ い て の よ り 詳 し い 情 報 を 受 け 取 る た め に ソ ケ ッ ト ご と の エ ラ ー キ ュ ー を 受 け 取 る こ と が 可 能 で あ る 。 ip (7) の IP_RECVERR を 参 照 す る こ と 。

ソ ケ ッ ト の 操 作 は ソ ケ ッ ト レ ベ ル options に よ っ て 制 御 さ れ る 。 こ れ ら の オ プ シ ョ ン は <sys/socket.h> に 定 義 さ れ て い る 。 setsockopt (2) と getsockopt (2) 関 数 は そ れ ぞ れ オ プ シ ョ ン の 設 定 と 取 得 を 行 な う 。

返 り 値

成 功 し た 場 合 、 新 し い ソ ケ ッ ト の フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 エ ラ ー が 発 生 し た 場 合 は -1 を 返 し 、 errno を 適 切 に 設 定 す る 。

エ ラ ー

EACCES

指 定 さ れ た タ イ プ ま た は プ ロ ト コ ル の ソ ケ ッ ト を 作 成 す る 許 可 が 与 え ら れ て い な い 。

EAFNOSUPPORT

指 定 さ れ た ア ド レ ス フ ァ ミ リ ー が サ ポ ー ト さ れ て い な い 。

EINVAL

知 ら な い プ ロ ト コ ル 、 ま た は 利 用 で き な い プ ロ ト コ ル フ ァ ミ リ ー で あ る 。

EINVAL

type に 無 効 な フ ラ グ が 指 定 さ れ て い る 。

EMFILE

1プ ロ セ ス が オ ー プ ン で き る フ ァ イ ル デ ィ ス ク リ プ タ ー 数 の 上 限 に 達 し た 。

ENFILE

オ ー プ ン さ れ た フ ァ イ ル の 総 数 が シ ス テ ム 全 体 の 上 限 に 達 し て い た 。

ENOBUFS ま た は ENOMEM

十 分 な メ モ リ ー が な い 。 十 分 な 資 源 が 解 放 さ れ る ま で は ソ ケ ッ ト を 作 成 す る こ と は で き な い 。

EPROTONOSUPPORT

こ の ド メ イ ン で は 指 定 さ れ た プ ロ ト コ ル ま た は プ ロ ト コ ル タ イ プ が サ ポ ー ト さ れ て い な い 。

下 位 の プ ロ ト コ ル モ ジ ュ ー ル か ら 他 の エ ラ ー が 生 成 さ れ る か も し れ な い 。

準 拠

POSIX.1-2001, POSIX.1-2008, 4.4BSD.

フ ラ グ SOCK_NONBLOCK , SOCK_CLOEXEC は Linux 固 有 で あ る 。

socket () は 4.2BSD で 登 場 し た 。 一 般 に 、 (System V の 変 種 を 含 め て ) BSD の ソ ケ ッ ト 層 の 互 換 性 を サ ポ ー ト し て い る BSD 以 外 の シ ス テ ム へ の 、 ま た は 、 BSD 以 外 の シ ス テ ム か ら の 移 植 が で き る 。

注 意

POSIX.1 で は <sys/types.h> の イ ン ク ル ー ド は 必 須 と さ れ て お ら ず 、 Linux で は こ の ヘ ッ ダ ー フ ァ イ ル は 必 要 で は な い 。 し か し 、 歴 史 的 に は 、 い く つ か の 実 装 (BSD 系 ) で こ の ヘ ッ ダ ー フ ァ イ ル が 必 要 で あ り 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は こ の フ ァ イ ル を イ ン ク ル ー ド す る の が 賢 明 で あ ろ う 。

4.x BSD に お い て 定 数 を 使 用 す る 場 合 、 プ ロ ト コ ル フ ァ ミ リ ー に は PF_UNIX , PF_INET 等 を 使 用 し て い る 。 一 方 で ア ド レ ス フ ァ ミ リ ー に は AF_UNIX , AF_INET 等 が 使 用 さ れ て い る 。 し か し な が ら BSD の マ ニ ュ ア ル で は 「 一 般 に プ ロ ト コ ル フ ァ ミ リ ー は ア ド レ ス フ ァ ミ リ ー と 同 じ も の で あ る 。 」 と 保 証 し て い る 。 そ れ 以 外 の 規 格 で は 全 て の 場 所 で AF_* が 使 用 さ れ て い る 。

socket () の 利 用 例 が getaddrinfo (3) に 記 載 さ れ て い る 。

関 連 項 目

accept (2), bind (2), close (2), connect (2), fcntl (2), getpeername (2), getsockname (2), getsockopt (2), ioctl (2), listen (2), read (2), recv (2), select (2), send (2), shutdown (2), socketpair (2), write (2), getprotoent (3), address_families (7), ip (7), socket (7), tcp (7), udp (7), unix (7)

“An Introductory 4.3BSD Interprocess Communication Tutorial” and “BSD Interprocess Communication Tutorial”, ( UNIX Programmer’s Supplementary Documents Volume 1. と し て 再 版 さ れ た )

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。