- 论坛徽章:
- 0
|
现在一个客户端程序接收服务端程序返回的消息,出现时好时坏的情况(tcp连接)
客户端发送请求包后,用select函数进行探测,如果有数据再recv接收。
相应的代码如下:
int TcpRecv(int sockfd, char *buf, int len, int nFlag)
{
char *ptr ;
int nbytes = 0;
int left;
fd_set fd;
struct timeval timeout;
int i, nFileFlag;
int retv, retry;
retry = 0;
nbytes = 0;
ptr = buf + nbytes;
while (len)
{
left = len > PACKET ? PACKET : len;
FD_ZERO(&fd);
FD_SET(sockfd, &fd);
timeout.tv_sec = nFlag;
timeout.tv_usec = 0;
retv = select(sockfd + 1, &fd, NULL, NULL, &timeout);
if (retv <= 0)
{
return -2;
}
if (FD_ISSET(sockfd, &fd))
{
retry = 0;
nbytes = recv(sockfd, ptr, left, 0);
if ( nbytes < 0 )
{
return -1;
}
ptr += nbytes;
len = len - nbytes;
if (nbytes == 0) break;
}
}
return (ptr - buf);
} |
在客户端能抓到服务端返回的包,但是对于一些包select的结果一直都是0
分析成功和失败的包数据,目前发现有个问题
成功接受到的包,客户端整个发包服务器回包耗时在0.05秒左右,
接收不到的包,客户端整个发包服务器回包耗时在0.005秒左右。
有哪位兄弟姐妹遇到过这种情况吗?大家帮忙分析下是什么原因,非常感谢! |
|