複数の要求を同時に処理するアプリケーションでは、プロセス間の非同期通信を必要とします。非同期ソケットは、SOCK_STREAM
タイプでなければなりません。ソケットを非同期にするには、例 2-14 に示すように fcntl(2) 呼び出しを発行します。
#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) は、データ転送を開始します。次の節で説明しているように、データ転送はシグナル方式の入出力ルーチンによって行われます。