ソケット・タイプ
ソケットは、通信プロパティーに従って分類されます。 プロセスは通常、同じタイプのソケット間で通信します。 ただし、基礎となる通信プロトコルが通信をサポートしている場合は、さまざまなタイプのソケットが通信できます。
/*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 ソケット・タイプを使用して下位プロトコルまたはハードウェア・インターフェースと通信する場合に重要です。 アプリケーション・プログラムは、通信が行われるアドレス・ファミリーを指定する必要があります。
アプリケーション・プログラムは、 send および recv サブルーチンを使用して、アウト・オブ・バンド・データを管理することができます。
SOCK_STREAM 通信プロトコルは、データの損失や重複を防ぐように設計されています。 ピア・プロトコルにバッファー・スペースがあるデータが、妥当な時間内に正常に送信できない場合、接続は切断されます。 この場合、ソケットサブルーチンは戻り値-1でエラーを示し、グローバル変数errnoにETIMEDOUT が設定される。 プロセスが破損したストリームで送信すると、 SIGPIPE シグナルが発信されます。 シグナル終了を処理できないプロセス。 アウト・オブ・バンド・データがソケットに到着すると、 SIGURG シグナルがプロセス・グループに送信されます。
ソケットに関連付けられたプロセス・グループは、 SIOCGPGRP または SIOCSPGRP ioctl 操作によって読み取りまたは設定することができます。 データに関するシグナルを受信するには、 SIOCSPGRP と FIOASYNC ioctl の両方の操作を使用します。 これらの操作は、 sys/ioctl.h ファイルに定義されています。