请教在linux平台下非阻塞socket connect之后判断是否连接成功???
int successConnect(int sockid)
{
int i, Num, ret;
UBYTE temp[256];
struct timeval wt;
struct sockaddr_in peeraddr;
socklen_t len;
Sock = sockid;
FD_SET(Sock, &orig_fdset);
wt.tv_sec = 0;
wt.tv_usec = 100000;//这是我定义等待多长时间都不管用
memcpy(&fdset, &orig_fdset,sizeof(orig_fdset));
if(select(sockid+1, (fd_set *)0, &fdset, (fd_set *)0, (struct timeval *)&wt)<=0)
{
ClosePort(sockid);
FD_CLR(sockid, &orig_fdset);
return -1;
}
else
{
Num = ReadPort(sockid, temp, 0);
if(Num < 0)
{
ClosePort(sockid);
FD_CLR(sockid, &orig_fdset);
return -1;
}
else if(Num == 0)
{
int ret = getpeername(sockid, (struct sockaddr *)&peeraddr, &len);
if (ret == 0)
{
return 0;//这里表示连接正确
}
else
{
ClosePort(sockid);
FD_CLR(sockid, &orig_fdset);
return -1;//所有返回-1为连接错误
}
}
}
}
这是一个非阻塞socket, connect已经完成上面这个successConnect函数是为了查看有没有连接成功。
请问这段判断连接是否成功的函数有什么问题么,为什么我连接好几次才能连上呢?
是不是我connect之后直接用这个函数判断太快了。。。