在同时处理多个请求的应用程序中,要求在进程之间进行异步通信。异步套接字的类型必须为 SOCK_STREAM。要使套接字异步,请发出 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) 来启动数据传送。信号驱动的 I/O 例程将完成数据传送,如下节中所述。