编程接口指南

异步套接字 I/O

在同时处理多个请求的应用程序中,要求在进程之间进行异步通信。异步套接字的类型必须为 SOCK_STREAM。要使套接字异步,请发出 fcntl(2) 调用,如以下示例所示。


示例 7–12 使套接字异步

#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 例程将完成数据传送,如下节中所述。