ソケット・タイプ

ソケットは、通信プロパティーに従って分類されます。 プロセスは通常、同じタイプのソケット間で通信します。 ただし、基礎となる通信プロトコルが通信をサポートしている場合は、さまざまなタイプのソケットが通信できます。

各ソケットには、そのソケットを使用する通信のセマンティクスを記述する関連タイプがあります。 ソケット・タイプは、信頼性、順序付け、およびメッセージの重複の防止などのソケット通信プロパティーを決定します。 ソケット・タイプの基本セットは、 sys/socket.h ファイルで定義されます。

/*Standard socket types */
#define  SOCK_STREAM             1 /*virtual circuit*/
#define  SOCK_DGRAM              2 /*datagram*/
#define  SOCK_RAW                3 /*raw socket*/
#define  SOCK_RDM                4 /*reliably-delivered message*/
#define  SOCK_CONN_DGRAM         5 /*connection datagram*/

その他のソケット・タイプを定義できます。

オペレーティング・システムは、以下のソケットの基本セットをサポートします。
項目 説明
SOCK_DGRAM 固定最大長のコネクションレス・メッセージであるデータグラムを提供します。 このタイプのソケットは、通常、ネーム・サーバーやタイム・サーバーなどの短メッセージに使用されます。これは、メッセージ配信の順序と信頼性が保証されないためです。

UNIXドメインでは、SOCK_DGRAMソケットタイプはメッセージキューに似ている。 インターネットドメインでは、 SOCK_DGRAM ソケットタイプは User Datagram Protocol / Internet Protocol (UDP/IP) プロトコルで実装される。

データグラム ・ソケットは、順序付けされていない、信頼できる、または重複していないデータの双方向フローをサポートします。 データグラム・ソケットでメッセージを受信するプロセスでは、メッセージが重複しているか、送信された順序と異なる順序になっていることがあります。 ただし、データ内のレコード境界は保持されます。 データグラム・ソケットは、多くの最新のパケット交換ネットワークに見られる機能を厳密にモデル化します。

SOCK_STREAM ストリーム・データの伝送メカニズムを使用して、シーケンス化された両方向バイト・ストリームを提供します。 このソケット・タイプは、信頼性の高い順序で、アウト・オブ・バンド機能を使用してデータを伝送します。

UNIX ドメインでは、 SOCK_STREAM ソケット・タイプはパイプのように機能します。 インターネットドメインでは、 SOCK_STREAM ソケットタイプは Transmission Control Protocol / Internet Protocol (TCP/IP) プロトコルで実装されている。

ストリーム ・ソケットは、レコード境界のない、双方向で信頼性の高い、シーケンス化された、重複しないデータ・フローを提供します。 データ・フローの両方向性とは別に、接続されたストリーム・ソケットのペアは、パイプとほぼ同一のインターフェースを提供します。

SOCK_RAW

内部ネットワーク・プロトコルおよびインターフェースへのアクセスを提供します。 このタイプのソケットは、root ユーザー権限を持つユーザー、または CAP_NUMA_ATTACH 機能を持つ非 root ユーザーのみが使用できます。 (非 root ロー・ソケット・アクセスの場合、 chuser コマンドは CAP_PROPAGATEとともに CAP_NUMA_ATTACH 機能を割り当てます。 詳しくは、 chuser コマンドを参照してください。)

ロー・ソケットを使用すると、アプリケーションは下位レベルの通信プロトコルに直接アクセスできます。 ロー・ソケットは、通常のインターフェースを介して直接アクセスできないプロトコル機能を利用したい場合や、既存の低レベル・プロトコルの上に新しいプロトコルを構築したい場合に、上級者を対象としています。

ロー・ソケットは通常、データグラム指向ですが、正確な特性は、プロトコルによって提供されるインターフェースによって異なります。

SOCK_SEQPACKET 情報のシーケンス化された、信頼性の高い、重複しないフローを提供します。
SOCK_CONN_DGRAM (SOCK_CONN_DGRAM) コネクション・オリエンテッド・データグラム・サービスを提供します。 このタイプのソケットは、データの双方向フローをサポートします。これは順序付けされ、重複していませんが、信頼性はありません。 これはコネクション・オリエンテッド・サービスであるため、ソケットはデータ転送の前に接続する必要があります。 現在、このソケット・タイプをサポートしているのは、ネットワーク・デバイス・ドライバー (NDD) ドメインの非同期転送モード (ATM) プロトコルのみです。

SOCK_DGRAM および SOCK_RAW ソケット・タイプを使用すると、アプリケーション・プログラムは、 send サブルーチンで指定された対応するものにデータグラムを送信することができます。 アプリケーション・プログラムは、 recv サブルーチンを使用して、ソケットを介してデータグラムを受け取ることができます。 Protocol パラメーターは、 SOCK_RAW ソケット・タイプを使用して下位プロトコルまたはハードウェア・インターフェースと通信する場合に重要です。 アプリケーション・プログラムは、通信が行われるアドレス・ファミリーを指定する必要があります。

SOCK_STREAM ソケット・タイプは、全二重バイト・ストリームです。 ストリーム・ソケットでデータを送受信するには、その前にストリーム・ソケットが接続されている必要があります。 データ転送にストリーム・ソケットを使用する場合、アプリケーション・プログラムは以下の順序で実行する必要があります。
  1. connect サブルーチンを使用して、別のソケットへの接続を作成します。
  2. read および write サブルーチンまたは send および recv サブルーチンを使用して、データを転送します。
  3. close サブルーチンを使用して、セッションを終了します。

アプリケーション・プログラムは、 send および recv サブルーチンを使用して、アウト・オブ・バンド・データを管理することができます。

SOCK_STREAM 通信プロトコルは、データの損失や重複を防ぐように設計されています。 ピア・プロトコルにバッファー・スペースがあるデータが、妥当な時間内に正常に送信できない場合、接続は切断されます。 この場合、ソケットサブルーチンは戻り値-1でエラーを示し、グローバル変数errnoETIMEDOUT が設定される。 プロセスが破損したストリームで送信すると、 SIGPIPE シグナルが発信されます。 シグナル終了を処理できないプロセス。 アウト・オブ・バンド・データがソケットに到着すると、 SIGURG シグナルがプロセス・グループに送信されます。

ソケットに関連付けられたプロセス・グループは、 SIOCGPGRP または SIOCSPGRP ioctl 操作によって読み取りまたは設定することができます。 データに関するシグナルを受信するには、 SIOCSPGRPFIOASYNC ioctl の両方の操作を使用します。 これらの操作は、 sys/ioctl.h ファイルに定義されています。