日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
SOCKET(2) FreeBSD システムコールマニュアル SOCKET(2)
名称
socket -- 通信のためのエンドポイントを作成する
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <sys/socket.h>
int
socket(int domain, int type, int protocol);
解説
socket() システムコールは、通信のエンドポイントを作成し、記述子を返しま
す。
domain 引数は、通信が行なわれる通信ドメインを指定します。これは、使用され
るべきプロトコルファミリを選択します。これらのファミリは、インクルード
ファイル <sys/socket.h> で定義されています。現在解釈される形式は、次の通
りです:
PF_LOCAL ホスト内部のプロトコル (PF_UNIX の別名),
PF_UNIX ホスト内部のプロトコル,
PF_INET インターネットバージョン 4 プロトコル,
PF_INET6 インターネットバージョン 6 プロトコル,
PF_ROUTE 内部の経路制御プロトコル,
PF_LINK リンク層インタフェース,
PF_KEY 内部の鍵管理機能,
PF_NATM 非同期転送モードプロトコル,
PF_NETGRAPH Netgraph ソケット,
PF_IEEE80211 IEEE 802.11 無線リンク層プロトコル (WiFi),
PF_NETLINK Netlink プロトコル,
PF_BLUETOOTH Bluetooth プロトコル,
PF_INET_SDP OFED ソケット直接プロトコル (IPv4),
PF_INET6_SDP OFED ソケット直接プロトコル (IPv6)
各プロトコルファミリは、接頭辞が ``PF_'' の代わりに ``AF_'' であることを
除いて、同じ名前がある、アドレスファミリに接続されます。また、他のプロト
コルファミリは、対応するアドレスファミリで ``PF_'' から始めて、定義されま
す。
ソケットには、通信のセマンティックを指定する type があります。現在、定義
されているタイプは、次の通りです:
SOCK_STREAM ストリームソケット
SOCK_DGRAM データグラムソケット
SOCK_RAW 生プロトコルインタフェース
SOCK_RDM 伝達が信頼できるパケット
SOCK_RDM 確実に配信されるパケット
SOCK_SEQPACKET 順序付けられたパケットストリーム
SOCK_STREAM タイプは、連続して、信頼できる、双方向の接続に基づいたバイト
ストリームを提供します。帯域外のデータ転送メカニズムが、サポートされま
す。SOCK_DGRAM ソケットは、(コネクションレス、固定された (通常小さい) 最
大の長さの信頼できないメッセージ) データグラムをサポートします。
SOCK_SEQPACKET ソケットは、連続して、信頼できて、固定された最大の長さの
データグラムのための双方向の接続ベースのデータ転送パスを提供します。消費
者は、各読み込みシステムコールで全体のパケットを読み込むために要求されま
す。この機能は、プロトコル特有の特性があります。SOCK_RAW ソケットは、内部
のネットワークプロトコルとインタフェースへのアクセスを提供しています。
スーパユーザのみが利用可能なタイプ SOCK_RAW と計画されているが、まだ実装
されていない SOCK_RDM は、ここで説明されません。
さらに、次のフラグは、type 引数で許可されます:
SOCK_CLOEXEC 新しい記述子で close-on-exec を設定する
SOCK_NONBLOCK 新しいソケットで non-blocking モードを設定する
protocol 引数は、ソケットで使用される特別のプロトコルを指定します。通常、
単一のプロトコルだけが、与えられたプロトコルファミリ内の特別のソケットタ
イプをサポートするために存在します。しかしながら、多くのプロトコルが存在
することは可能で、その場合に、特別のプロトコルは、このように指定されなけ
ればなりません。使用するプロトコル番号は、通信が行なわれる ``通信ドメイ
ン'' に特有です。protocols(5) を参照してください。
protocol 引数は、もしあれば、プロトコルのためのソケットタイプのデフォルト
実装を要求するために、0 の設定されます。
タイプ SOCK_STREAM のソケットは、パイプに似た、全二重のバイトストリームで
す。ストリームソケットは、あらゆるデータがそれで送信するか、または受信さ
れる前に、接続された状態でなければなりません。別のソケットへの接続は、
connect(2) システムコールで作成されます。いったん接続されると、データは、
read(2) または write(2) を使用して、または send(2) と recv(2) 関数のいく
つかの変異型を使用して転送されます。(インターネットファミリのような、いく
つかのプロトコルファミリは、sendto(2) システムコールを使用することによっ
て接続操作に乗せて送信されるデータを許可する、``暗黙の接続'' の観念をサ
ポートします。) セッションが完了されるとき、close(2) が実行されます。ま
た、帯域外のデータは、send(2) で説明されるように送信され、recv(2) で説明
されるように受信されます。
SOCK_STREAM を実装するために使用される通信プロトコルは、データが失われな
いか、または重複されないことを保証します。通信相手のプロトコルにバッファ
空間があるデータの部分は、時間の妥当な長さ内で、成功して転送できないな
ら、接続は、壊れていると見なされ、呼び出しは、返される -1 とグローバル変
数 errno の特有なコードとして ETIMEDOUT でエラーを示します。プロトコル
は、オプションで他の活動がない約 1 分ごとに転送を強制することによって、ソ
ケットを ``warm'' (温める) ことを保持します。応答を、引き出すことができな
いなら、エラーが、示され、そうでなければ、延長された期間 (例えば、5 分)
のためのアイドルな接続となります。デフォルトで、プロセスが破損したスト
リームで送信するなら、SIGPIPE シグナルが発生しますが、この振る舞いは、
setsockopt(2) を通して抑制されます。
SOCK_SEQPACKET ソケットは、SOCK_STREAM ソケットと同じシステムコールを使用
します。唯一の違いは、read(2) 呼び出しが、要求されたデータ量だけを返し、
到着パケットの余分なもの、破棄されます。
SOCK_DGRAM と SOCK_RAW ソケットは、send(2) 呼び出しで指定された通信相手へ
のデータグラムの送信を許可します。データグラムは、一般的に、そのリターン
アドレスで次のデータグラムを返す、recvfrom(2) で受信されます。
帯域外のデータが到着するとき、SIGURG シグナルを受信するプロセスグループを
指定するために、fcntl(2) システムコールを使用することができます。また、そ
れは、SIGIO を通して非ブロッキング I/O と非同期の通知の I/O イベントを有
効にします。
ソケットの操作は、ソケットのレベルのオプションによって制御されます。これ
らのオプションは、ファイル <sys/socket.h> で定義されています。
setsockopt(2) と getsockopt(2) システムコールは、それぞれ、オプションを設
定し、取得するために使用されます。
戻り値
エラーが起こるならば、-1 が、返され、そうでなければ、ソケットを参照してい
る記述子の値が返されます。
エラー
socket() システムコールは、は、次の場合に失敗します:
[EACCES] 指定されたタイプおよびプロトコルのソケットを作成する
パーミッションが拒否されています。
[EAFNOSUPPORT] アドレスファミリ (ドメイン) が、サポートされていませ
ん、または指定されたドメインが、このプロトコルファミリ
によってサポートされていません。
[EMFILE] プロセスごとの記述子テーブルが満杯です。
[ENFILE] システムファイルテーブルが満杯です。
[ENOBUFS] 十分なバッファ空間が利用不可能です。十分なリソースが解
放されるまで、ソケットを作成できません。
[EPERM] ユーザに、要求された操作を実行するための十分な特権があ
りません。
[EPROTONOSUPPORT] プロトコルタイプまたは指定されたプロトコルが、このドメ
イン内でサポートされていません。
[EPROTOTYPE] ソケットタイプが、プロトコルによってサポートされていま
せん。
関連項目
accept(2), bind(2), connect(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), CMSG_DATA(3), getprotoent(3),
netgraph(4), protocols(5)
"An Introductory 4.3 BSD Interprocess Communication Tutorial", PS1, 7.
"BSD Interprocess Communication Tutorial", PS1, 8.
規格
socket() 関数は、IEEE Std 1003.1-2008 (``POSIX.1'') に適合しています。
POSIX 標準は、アドレスファミリのための AF_INET, AF_INET6 と AF_UNIX 定数
のみを指定し、socket() の domain 引数のための AF_* 定数の使用を要求しま
す。SOCK_CLOEXEC フラグは、POSIX 標準の次のバージョンにに適合するはずで
す。SOCK_RDM type、PF_* 定数と他のアドレスファミリは、FreeBSD 拡張です。
歴史
socket() システムコールは、4.2BSD で登場しました。
FreeBSD 13.2 August 19, 2018 FreeBSD 13.2