初级会员

- 积分
- 116
- 金钱
- 116
- 注册时间
- 2015-7-21
- 在线时间
- 18 小时
|
5金钱
硬件平台:应该和这个问题没关系
软件平台:ucosII+lwip1.4.1+IAR+JLINK
背景描述:
1:电脑做服务端、设备做客户端,设备单开一个线程用作和服务端的交互;
2:线程创建,连接,通信没有问题,(服务器端使用网络调试助手);
最终需要解决的问题:
客户端在加电后创建一个socket,然后一直阻塞在read()函数,但这样存在一个问题,就是网络断开后无法重新连接,需要重启客户端—>创建socket->connect()
目的:
在read()中添加超时,即等待10s如果还没有接收到数据的话,close()套接字,然后再重新new一个,重新connect。
目前的问题:
源码:
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
ret = setsockopt(sock, SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));
read(sock, &buff[0], sizeof(buff));
debug模式下,单步运行,当执行到setsockopt()时,ret的值为0,也就是正常的,但是执行到read()函数时,并没有等待10s,而是马上跳到下一行代码。
如果不使用setsockopt()的话,会一直阻塞带read()函数,直到收到上位机下发的数据。
请问为什么在read()函数时没有等待10s再往下执行能???debug模式下和release模型下,timeout有什么区别吗???
|
|