【发布时间】:2012-04-29 13:18:11
【问题描述】:
我的应用程序创建了一个 TCP 连接,这工作正常。 但是在一个网络服务器有很多IP说
- 174.X.X.X
- 54.x.x.x 像这样
调用 TCP 连接时(非阻塞,超时 60 秒)
到 IP 174.X.X.X 总是成功的。
但是使用 ip 54.x.x.x 连接到同一服务器的 TCP 失败(大多数情况下),错误号为 115
正在测量操作。
你能解释一下 errno 115 的可能原因是什么
操作系统:Linux
我的 TCP 连接代码如下
tcp_connect(......)
{
int iValOpt = 0;
int iLength= 0;
fcnt((int)(long)SockID,F_SETFL_O_NONBLOCK);
ret = connect (sockID,(struct sockaddr*)pstSockAdr,uiSockLen);
if (ret < 0)
{
if (errno == EINPROGRESS)
{
stTv.tv_sec = 60;
stTv.tv_usec = 0;
FD_ZERO(&write_fd);
FD_SET(sockID,&write_fd);
iLength = sizeof(int);
if (0 < select (sockID+1) , NULL,&write_fd,NULL,&stTv);
{
if(0 > getsockopt(sockID,SOL_SOCKET,SO_ERROR,(void*)(&iValOpt),&iLength))
{
return -1
}
if (0 != iValOpt)
{
return -1;
}
return success;
}
else
{
return -1;
}
}
else
{
return -1;
}
}
return success;
}
【问题讨论】:
-
如果您在不使用应用程序的情况下尝试 telnet 到 54.x.x.x ip 会发生什么?同样的行为?
-
不,手动腻子应用工作正常
-
'非阻塞超时'是一个矛盾的术语。
标签: c networking tcp network-programming errno