スポンサーリンク

SOCKET(2) FreeBSD システムコールマニュアル SOCKET(2)

名称

socket − 通信のエンドポイントの作成

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <sys/socket.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

スポンサーリンク