ネットワークインタフェース

非同期ソケット入出力

複数の要求を同時に処理するアプリケーションでは、プロセス間の非同期通信を必要とします。非同期ソケットは、SOCK_STREAM タイプでなければなりません。ソケットを非同期にするには、例 2-14 に示すように fcntl(2) 呼び出しを発行します。


例 2-14 ソケットを非同期にする

#include <fcntl.h>
#include <sys/file.h>
...
int fileflags;
int s;
...
s = socket(AF_INET6, SOCK_STREAM, 0);
...
if (fileflags = fcntl(s, F_GETFL ) == -1)
		perror("fcntl F_GETFL");
		exit(1);
}
if (fcntl(s, F_SETFL, fileflags | FNDELAY | FASYNC) == -1)
		perror("fcntl F_SETFL, FNDELAY | FASYNC");
		exit(1);
}
...

ソケットの初期化と接続が終わり、非同期に設定されると、ファイルを非同期で読み書きする場合のように通信が行われます。send(3SOCKET)write(2)recv(3SOCKET)read(2) は、データ転送を開始します。次の節で説明しているように、データ転送はシグナル方式の入出力ルーチンによって行われます。