微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200 sl_Recv() 函数阻塞

CC3200 sl_Recv() 函数阻塞

时间:10-02 整理:3721RD 点击:

请问下:

      我把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()在不断开连接和不发数据的情况下,也能跳出。或者阻塞时间可调。

谢谢!

问题解决:原来是参数传递错误。

如果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);

这样才能在接收数据时非阻塞

问题解决:原来是参数传递错误。

如果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);

这样才能在接收数据时非阻塞

我之前都试过, 没有效果呢!

奇怪

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top