请问下:
我把CC3200设置在STA -> TCP Server模式,
long lNonBlocking = 1;
iStatus = sl_SetSockOpt(iSockID, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &lNonBlocking, sizeof(lNonBlocking));
已经设置成非阻塞,在 sl_Accept()中已经是非阻塞了。但当有客户端连上,执行sl_Recv()函数时。
在连接没断开和不发数据的情况下,就一直阻塞在那。
只有客户端断开连接或者发送数据才能跳出sl_Recv()函数。
iStatus = sl_Recv(iNewSockID, g_cBsdBuf, iTestBufLen, 0);
有没什么办法能让sl_Recv()在不断开连接和不发数据的情况下,也能跳出。或者阻塞时间可调。
谢谢!!!
Yang Patrick:
问题解决:原来是参数传递错误。
如果CC3200工作在 TCP Server模式,iStatus = sl_SetSockOpt(iSockID, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &lNonBlocking, sizeof(lNonBlocking)),只是设置CC3200在sl_Accept()是非阻塞。在客户端连上后sl_Accept()会返回客户端Socket,这时要接收客户端数据
sl_Recv(客户端Socket, g_cBsdBuf, iTestBufLen, 0);如果要设置非阻塞,
就要在sl_Accept()之后执行 sl_SetSockOpt(客户端Socket, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &lNonBlocking, sizeof(lNonBlocking));
然后再sl_Recv(客户端Socket, g_cBsdBuf, iTestBufLen, 0);
这样才能在接收数据时非阻塞
user1878904:
回复 Yang Patrick:
我之前都试过, 没有效果呢!
奇怪