Fa domain 引数では、通信を行う通信ドメインを指定します。 これにより、使用するプロトコルファミリが選択されます。 このプロトコルファミリは、インクルードファイル In 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 ソケット
ソケットには、通信の種類を指定する Fa タイプ があります。 現在、定義されているタイプは以下のとおりです:
SOCK_STREAM ストリーム型ソケット SOCK_DGRAM データグラム型ソケット SOCK_RAW 生プロトコルインタフェース SOCK_RDM 伝達が信頼できるパケット SOCK_SEQPACKET 順序付きパケットストリーム
SOCK_STREAM タイプは、連続した、信頼性のある、双方向接続ベースの バイトストリームを提供します。 帯域外データ転送メカニズムがサポートされることもあります。 SOCK_DGRAM ソケットでは、データグラム (コネクションレスで信頼性のない、 最大長が固定の (一般的には小さい) メッセージ) がサポートされます。 SOCK_SEQPACKET ソケットは、連続した、信頼性のある、双方向接続ベースの 最大長が固定のデータグラムの転送を提供します。 各読取りシステムコールでパケット全体を読み取る必要があるかもしれません。 この機能はプロトコル固有のもので、現在のところ実装されていません。 SOCK_RAW ソケットでは、内部ネットワークプロトコルとインタフェースにアクセスできます。 スーパユーザしか使用できない SOCK_RAW タイプ、および計画されているがまだ実装されていない SOCK_RDM については、ここでは説明しません。
Fa 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 に Er ETIMEDOUT が設定されます。 その他の動作がない場合、プロトコルは約 1 分ごとに転送を強制し、ソケットの ``接続'' を任意に維持します。 一定期間 (例えば 5 分間) アイドル接続で応答がない場合はエラーとなります。 破損したストリームでプロセスが送信すると、 SIGPIPE シグナルが発生します。 この場合、シグナルを処理しないプロセスは終了します。
SOCK_SEQPACKET ソケットは、 SOCK_STREAM ソケットとほぼ同じシステムコールです。 read(2) を呼び出しても、要求された量のデータしか戻されず、 受信パケットの残りの部分は放棄される点のみが異なります。
SOCK_DGRAM ソケットと SOCK_RAW ソケットでは、 send(2) の呼び出しで指定された通信相手にデータグラムを送信できます。 一般的にデータグラムは、次のデータグラムのアドレスを戻す recvfrom(2) で受信されます。
fcntl(2) システムコールは、帯域外データを受信した場合の SIGURG シグナルを受信するプロセスグループを指定できます。 非ブロッキング入出力、および入出力イベントの非同期通知も、 SIGIO で有効にできます。
ソケットのオペレーションは、ソケットレベルの オプション で制御されます。 このオプションは、ファイル In sys/socket.h に定義されています。 setsockopt(2) システムコールはオプションの設定に、 getsockopt(2) システムコールはオプションの入手に使用します。