総合手引 | セクション 2 | English | Deutsch | オプション |
#include <sys/types.h>
#include <sys/socket.h>
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) システムコールはオプションの入手に使用します。
[EPROTONOSUPPORT] | |
プロトコルタイプか指定されたプロトコルがドメインでサポートされていません。 | |
[EMFILE] | |
プロセスごとの記述子テーブルが満杯です。 | |
[ENFILE] | |
システムファイルテーブルが満杯です。 | |
[EACCES] | |
指定されたタイプやプロトコルのソケットを作成する権限が拒否されました。 | |
[ENOBUFS] | |
バッファ空間が不足しています。 充分なリソースが解放されるまでソケットを作成できません。 | |
PS1, 7, An Introductory 4.3 BSD Interprocess Communication Tutorial,
PS1, 8, BSD Interprocess Communication Tutorial,
SOCKET (2) | November 24, 1997 |
総合手引 | セクション 2 | English | Deutsch | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language. | ” |
— Donald Knuth |