关于socket的奇怪问题
SOCKET socket = ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(socket == INVALID_SOCKET)
return;
//非阻塞模式
unsigned long ul = 1;
if(::ioctlsocket(socket,FIONBIO,(unsigned long *)&ul) == SOCKET_ERROR)
{
::closesocket(socket);
return;
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(5401);//服务器端口
server.sin_addr.s_addr = inet_addr((LPCSTR)"127.0.0.1");//服务器IP地址
::connect(socket,(const struct sockaddr *)&server,sizeof(server));
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(socket,&r);
timeout.tv_sec = 15;//连接超时时间
timeout.tv_usec = 0;
INT iRc = ::select(0,0,&r,0,&timeout);
if(iRc <= 0)
{
::closesocket(socket);
return;
}
上面一段代码是客服端的socket代码,现在的问题是,我把客户端放在和服务器不同的机器上(服务器Ip地址变化一下),客户端执行的很正常,但是,如果我把客户端放在
和服务器相同的机器上(Ip地址变为127.0.0.1或者不变),select函数的返回总是零,也就是总是select超时,我把超时时间设置的很长,也是同样的问题。请教大家卫生么会出现这样的问题呢?