网络通信如何设定超时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信如何设定超时相关的知识,希望对你有一定的参考价值。
我写的一段程序
cmpp_status_t cmpp_recv(cmpp_conn* conn, cmppg_ismg_packet* cp, cmpp_uint32_t nTimeOut)
clock_t start, finish; //记下程序运行时间
start = clock(); //程序开始时间
char recvBuf[500]=0;
//接受从ISMG发来的包
int nCount = ::recv(conn->hSocket, recvBuf, 500, 0);
cmppg_deliver* cd = (cmppg_deliver*)recvBuf; //将其转化为cmppg_deliver包
end=clock();
return CMPP_SUCCESS;
我想让end与start之间的时间不能超过nTimeOut,超过就返回超时状态直接结束,可是recv方法接受不到数据它就一直在哪儿等,程序无法向下执行,也就无法计时,怎么才能设定一个时间段让它跳出recv方法呀,谁能告诉我,菜鸟求助中……
函数原形是:
int setsockopt(
__in SOCKET s,
__in int level,
__in int optname,
__in const char* optval,
__in int optlen
);
其中optname有SO_RCVTIMEO和SO_SNDTIMEO两项, 是用来设置发送超时和接收超时的 参考技术A 你可以用select函数. select可以设定一个超时时限,然后试探socket是否有数据可以recv. 当select超时并且还没有数据传过来时,就可以判定超时退出.
以上是关于网络通信如何设定超时的主要内容,如果未能解决你的问题,请参考以下文章