This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

非阻塞的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.