.\" Copyright (c) 1983, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: @(#)socket.2 8.1 (Berkeley) 6/4/93 .\" %FreeBSD: src/lib/libc/sys/socket.2,v 1.30 2004/07/02 23:52:13 ru Exp % .\" .\" $FreeBSD$ .\" .Dd November 24, 1997 .Dt SOCKET 2 .Os .Sh 名称 .Nm socket .Nd 通信のエンドポイントの作成 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/socket.h .Ft int .Fn socket "int domain" "int type" "int protocol" .Sh 解説 .Fn socket システムコールは、通信のエンドポイントを作成し、記述子を戻します。 .Pp .Fa domain 引数では、通信を行う通信ドメインを指定します。 これにより、使用するプロトコルファミリが選択されます。 このプロトコルファミリは、インクルードファイル .In sys/socket.h で定義されています。 現在解釈されるフォーマットは以下のとおりです: .Pp .Bd -literal -offset indent -compact PF_LOCAL PF_UNIX と呼ばれていた、ホスト内プロトコル PF_UNIX ホスト内プロトコル、使用は奨励されない。 PF_LOCAL を使用のこと PF_INET IPv4 プロトコル PF_PUP BSP のような PUP プロトコル PF_APPLETALK AppleTalk プロトコル PF_ROUTE 内部ルーティングプロトコル PF_LINK リンク層インタフェース PF_IPX Novell 社 IPX (Internet Packet eXchange) プロトコル PF_RTIP RTIP パケットの識別に使用 PF_PIP PIP パケットの識別に使用 PF_ISDN 統合デジタル通信サービス網 (ISDN) PF_KEY 内部鍵管理機能 PF_INET6 IPv6 プロトコル PF_NATM ATM へのネイティブアクセス PF_ATM ATM PF_NETGRAPH Netgraph ソケット .Ed .Pp ソケットには、通信の種類を指定する .Fa タイプ があります。 現在、定義されているタイプは以下のとおりです: .Pp .Bd -literal -offset indent -compact SOCK_STREAM ストリーム型ソケット SOCK_DGRAM データグラム型ソケット SOCK_RAW 生プロトコルインタフェース SOCK_RDM 伝達が信頼できるパケット SOCK_SEQPACKET 順序付きパケットストリーム .Ed .Pp .Dv SOCK_STREAM タイプは、連続した、信頼性のある、双方向接続ベースの バイトストリームを提供します。 帯域外データ転送メカニズムがサポートされることもあります。 .Dv SOCK_DGRAM ソケットでは、データグラム (コネクションレスで信頼性のない、 最大長が固定の (一般的には小さい) メッセージ) がサポートされます。 .Dv SOCK_SEQPACKET ソケットは、連続した、信頼性のある、双方向接続ベースの 最大長が固定のデータグラムの転送を提供します。 各読取りシステムコールでパケット全体を読み取る必要があるかもしれません。 この機能はプロトコル固有のもので、現在のところ実装されていません。 .Dv SOCK_RAW ソケットでは、内部ネットワークプロトコルとインタフェースにアクセスできます。 スーパユーザしか使用できない .Dv SOCK_RAW タイプ、および計画されているがまだ実装されていない .Dv SOCK_RDM については、ここでは説明しません。 .Pp .Fa protocol 引数では、ソケットで使用する特定プロトコルを指定します。 通常の場合は、1 つのプロトコルのみが存在して、 指定したプロトコルファミリの特定ソケットタイプをサポートします。 しかし、複数のプロトコルが存在することも可能です。 この場合は、特定プロトコルをこの方法で指定する必要があります。 使用するプロトコル番号は、通信を行う .Dq 通信ドメイン に固有です。 .Xr protocols 5 を参照してください。 .Pp タイプ .Dv SOCK_STREAM のソケットは、パイプに類似した全二重バイトストリームです。 ストリームソケットでは、 .Em 接続済み状態 にしてからデータを送受信する必要があります。 別のソケットへの接続は、 .Xr connect 2 システムコールを呼び出して作成できます。 接続されたら、 .Xr read 2 と .Xr write 2 を呼び出すか、 .Xr send 2 と .Xr recv 2 関数の変種を呼び出してデータを転送できます。 (インターネットファミリなど、一部のプロトコルファミリでは、 .Dq 暗黙接続 という観念がサポートされています。 この接続では、 .Xr sendto 2 システムコールを呼び出し、接続オペレーションに乗せてデータを送信できます。) セッションが終了したら、 .Xr close 2 を実行しても構いません。 帯域外データは、 .Xr send 2 で説明されているように送信し、 .Xr recv 2 で説明されているように受信できます。 .Pp .Dv SOCK_STREAM の実装に使用する通信プロトコルでは、データの喪失や重複がないことが 保証されます。 ピアプロトコルにバッファ空間があるデータの一部を合理的な時間内に 問題なく転送できない場合は、接続が破損したとみなされて呼び出しが エラーとなり、-1 が戻されてグローバル変数 .Va errno に .Er ETIMEDOUT が設定されます。 その他の動作がない場合、プロトコルは約 1 分ごとに転送を強制し、ソケットの .Dq 接続 を任意に維持します。 一定期間 (例えば 5 分間) アイドル接続で応答がない場合はエラーとなります。 破損したストリームでプロセスが送信すると、 .Dv SIGPIPE シグナルが発生します。 この場合、シグナルを処理しないプロセスは終了します。 .Pp .Dv SOCK_SEQPACKET ソケットは、 .Dv SOCK_STREAM ソケットとほぼ同じシステムコールです。 .Xr read 2 を呼び出しても、要求された量のデータしか戻されず、 受信パケットの残りの部分は放棄される点のみが異なります。 .Pp .Dv SOCK_DGRAM ソケットと .Dv SOCK_RAW ソケットでは、 .Xr send 2 の呼び出しで指定された通信相手にデータグラムを送信できます。 一般的にデータグラムは、次のデータグラムのアドレスを戻す .Xr recvfrom 2 で受信されます。 .Pp .Xr fcntl 2 システムコールは、帯域外データを受信した場合の .Dv SIGURG シグナルを受信するプロセスグループを指定できます。 非ブロッキング入出力、および入出力イベントの非同期通知も、 .Dv SIGIO で有効にできます。 .Pp ソケットのオペレーションは、ソケットレベルの .Em オプション で制御されます。 このオプションは、ファイル .In sys/socket.h に定義されています。 .Xr setsockopt 2 システムコールはオプションの設定に、 .Xr getsockopt 2 システムコールはオプションの入手に使用します。 .Sh 戻り値 エラーが発生すると -1 が戻されます。 エラーが発生しなかった場合は、ソケットを参照する記述子が戻されます。 .Sh エラー 以下のような場合、 .Fn socket システムコールはエラーになります: .Bl -tag -width Er .It Bq Er EPROTONOSUPPORT プロトコルタイプか指定されたプロトコルがドメインでサポートされていません。 .It Bq Er EMFILE プロセスごとの記述子テーブルが満杯です。 .It Bq Er ENFILE システムファイルテーブルが満杯です。 .It Bq Er EACCES 指定されたタイプやプロトコルのソケットを作成する権限が拒否されました。 .It Bq Er ENOBUFS バッファ空間が不足しています。 充分なリソースが解放されるまでソケットを作成できません。 .El .Sh 関連項目 .Xr accept 2 , .Xr bind 2 , .Xr connect 2 , .Xr getpeername 2 , .Xr getsockname 2 , .Xr getsockopt 2 , .Xr ioctl 2 , .Xr listen 2 , .Xr read 2 , .Xr recv 2 , .Xr select 2 , .Xr send 2 , .Xr shutdown 2 , .Xr socketpair 2 , .Xr write 2 , .Xr getprotoent 3 , .Xr netgraph 4 , .Xr protocols 5 .Rs .%T "An Introductory 4.3 BSD Interprocess Communication Tutorial" .%B PS1 .%N 7 .Re .Rs .%T "BSD Interprocess Communication Tutorial" .%B PS1 .%N 8 .Re .Sh 歴史 .Fn socket システムコールは .Bx 4.2 で登場しました。