一、定义
阻塞模式:指的是当某个函数执行成功的条件当前不满足时,该函数会阻塞当前执行线程,程序执行流在超时时间到达或执行成功的条件满足后恢复继续执行。
非阻塞模式:即使某个函数执行成功的条件不满足,该函数也不会阻塞当前执行线程,而是立即返回,继续执行程序流。
二、如何将socket设置为非阻塞模式
无论是在Windows还是Linux,默认创建的socket都是阻塞模式的。
设置为非阻塞后,send会返回EAGAIN或者EWOULDBLOCK错误,此时可以调用select函数来监视何时可以发送数据。
1、第一种方式
在Linux上,可以通过使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket设置为非阻塞模式,示例代码如下:
使用fcntl函数来设置接收为非阻塞需要的头文件
#include <fcntl.h>
#include<unistd.h>
在接收前调用,更改接收为非阻塞。
fcntl(sockfd,F_SETFL,O_NONBLOCK)