非阻塞的recv
在TCP通信中recv可以设置为非阻塞的吗?我尝试了两种方法,
1.使用setsockopt把SOCKOPT_RECV_NONBLOCK 设置为非阻塞的,程序如下
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
short receiv_nonBlocking = 0;
setsockopt(sock, SOL_SOCKET, SOCKOPT_RECV_NONBLOCK , &receiv_nonBlocking, sizeof(receiv_nonBlocking));
2.把SOCKOPT_RECV_TIMEOUT 设置为0(或者是1等很小的数),程序如下:
unsigned long timeoutvalue = 0;
setsockopt(sock, SOL_SOCKET, SOCKOPT_RECV_TIMEOUT , &timeoutvalue , sizeof(timeoutvalue ));
但是都不行,执行recv时还是阻塞在那,直到收到客户端发来的数据时才能执行到recv后面的程序,请问我以上的程序设置有什么问题吗?同样的方法用在UDP通信时是可行的,阻塞,非阻塞模式都可以,为什么TCP通信时就不行呢,我的板子是原厂的5739那块,patch,SDK什么的肯定是最新的
struct timeval timeval;
timeval.tv_sec = 0; // Seconds
timeval.tv_usec = 5000; // Microseconds. 10000 microseconds resoultion
请按上面的这种方式去设置你的timeoutvalue.