- 论坛徽章:
- 0
|
原帖由 Arthur_ 于 2007-6-13 11:27 发表于 15楼
在RECV後面打印一個信息, 看看超時是否其作用.
我在代码中设置了超时:
int main(int argc, char* argv[])
{
BaseSocket qsSocket;
if (!qsSocket.create(_TCP))
return -1;
if (!qsSocket.bind((unsigned short) 8888))
return -1;
if (!qsSocket.listen(5))
return -1;
char* str= "Logger.default.grade=INFO;中华人民共和国";
int len = (int) strlen(str);
BaseSocket csock = qsSocket.accept();
int v;
csock.setTimeOut(2000); // 设置超时时间
while(true)
{
csock.send(len);
csock.send(str, len);
csock.recvInt(&v);
printf("v = %d\n", v);
}
return 0;
} |
然后,在recvInt的时候让客户不发送数据.到达时间后,直接走到下一行.同时,出现错误,错误号是11. 错误信息: Resource temporarily unavailable, 这个时候,程序仍然能正常运行。没有问题。而且结果也和预想的一样。这样,表示超时设置成功了。
再又做一个操作:把客户端给关掉。这个时候,服务端继续执行发送命令,出现错误。错误号是104,错误信息:Connection reset by peer. 而且,整个应用程序就down掉了。
这个也就是我说的问题所在了。如果出现socket通信错误,程序不应该全部down掉啊。
请赐教。 |
|