SOCKET(2) FreeBSD システムコールマニュアル SOCKET(2)
名称
socket − 通信のエンドポイントの作成 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/types.h> int |
socket(int domain, int type, int protocol); |
解説 |
socket() システムコールは、通信のエンドポイントを作成し、記述子を戻しま す。 domain 引数では、通信を行う通信ドメインを指定します。これにより、使用する プロトコルファミリが選択されます。このプロトコルファミリは、インクルード ファイル <sys/socket.h> で定義されています。現在解釈されるフォーマットは 以下のとおりです: 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 ソケット ソケットには、通信の種類を指定する タイプがあります。現在、定義されている タイプは以下のとおりです: SOCK_STREAM ストリーム型ソケット SOCK_DGRAM データグラム型ソケット SOCK_RAW 生プロトコルインタフェース SOCK_RDM 伝達が信頼できるパケット SOCK_SEQPACKET 順序付きパケットストリーム SOCK_STREAM タイプは、連続した、信頼性のある、双方向接続ベースのバイトス トリームを提供します。帯域外データ転送メカニズムがサポートされることもあ ります。 SOCK_DGRAM ソケットでは、データグラム (コネクションレスで信頼性 のない、最大長が固定の (一般的には小さい) メッセージ) がサポートされま す。 SOCK_SEQPACKET ソケットは、連続した、信頼性のある、双方向接続ベース の最大長が固定のデータグラムの転送を提供します。各読取りシステムコールで パケット全体を読み取る必要があるかもしれません。この機能はプロトコル固有 のもので、現在のところ実装されていません。 SOCK_RAW ソケットでは、内部 ネットワークプロトコルとインタフェースにアクセスできます。スーパユーザし か使用できない SOCK_RAW タイプ、および計画されているがまだ実装されていな い SOCK_RDM については、ここでは説明しません。 protocol 引数では、ソケットで使用する特定プロトコルを指定します。通常の場 合は、1 つのプロトコルのみが存在して、指定したプロトコルファミリの特定ソ ケットタイプをサポートします。しかし、複数のプロトコルが存在することも可 能です。この場合は、特定プロトコルをこの方法で指定する必要があります。使 用するプロトコル番号は、通信を行う ‘‘通信ドメイン’’ に固有です。 protocols(5) を参照してください。 タイプ 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 分ごとに転送を強制し、ソ ケットの ‘‘接続’’ を任意に維持します。一定期間 (例えば 5 分間) アイドル接 続で応答がない場合はエラーとなります。破損したストリームでプロセスが送信 すると、 SIGPIPE シグナルが発生します。この場合、シグナルを処理しないプロ セスは終了します。 SOCK_SEQPACKET ソケットは、 SOCK_STREAM ソケットとほぼ同じシステムコール です。 read(2) を呼び出しても、要求された量のデータしか戻されず、受信パ ケットの残りの部分は放棄される点のみが異なります。 SOCK_DGRAM ソケットと SOCK_RAW ソケットでは、 send(2) の呼び出しで指定さ れた通信相手にデータグラムを送信できます。一般的にデータグラムは、次の データグラムのアドレスを戻す recvfrom(2) で受信されます。 fcntl(2) システムコールは、帯域外データを受信した場合の SIGURG シグナルを 受信するプロセスグループを指定できます。非ブロッキング入出力、および入出 力イベントの非同期通知も、 SIGIO で有効にできます。 ソケットのオペレーションは、ソケットレベルの オプションで制御されます。こ のオプションは、ファイル <sys/socket.h> に定義されています。 setsockopt(2) システムコールはオプションの設定に、 getsockopt(2) システム コールはオプションの入手に使用します。 |
戻り値
エラーが発生すると -1 が戻されます。エラーが発生しなかった場合は、ソケッ トを参照する記述子が戻されます。 |
エラー
以下のような場合、 socket() システムコールはエラーになります: |
[EPROTONOSUPPORT]
プロトコルタイプか指定されたプロトコルがドメインでサ ポートされていません。 [EMFILE] [ENFILE] [EACCES] [ENOBUFS] 関連項目 |
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), getprotoent(3), netgraph(4), protocols(5) " |
An Introductory 4.3 BSD Interprocess Communication Tutorial", PS1, 7. " BSD Interprocess Communication Tutorial", PS1, 8.
歴史
socket() システムコールは 4.2BSD で登場しました。 FreeBSD 10.0 November 24, 1997 FreeBSD 10.0 |