非阻塞方式程序设计介绍
非阻塞方式的操作与阻塞方式的操作最大的不同点是函数的调用立刻返回,不管数据是否成功读取或者成功写入。使用fcntl()将套接字文件描述符按照如下的代码进行设置后,可以进行非阻塞的编程:
fcntl(s, F_SETFL, O_NONBLOCK);
其中的s是套接字文件描述符,使用F_SETFL命令将套接字s设置为非阻塞方式后,再进行读写操作就可以马上返回了。
非阻塞程序设计的例子
函数accept()可以使用非阻塞的方式轮询等待客户端的到来,在之前要设置NON_BLOCK方式。下面的代码使用了轮询的方式使用accept()和recv()函数,当客户端发送“HELLO”字符串时,发送“OK”响应给客户端并关闭客户端;当客户端发送“SHUTDOWN”字符串给服务器时,服务器发送“BYE”的客户端,并关闭客户端,然后退出程序。
#define PORT 9999
#define BACKLOG 4
int main(int argc, char *argv[])
{
struct sockaddr_in local,client;