Chinaunix
标题:
请教select的使用问题
[打印本页]
作者:
龚申行
时间:
2007-09-20 18:19
标题:
请教select的使用问题
我在我socket的程序里使用select作为定时器,部分代码如下:
if(connect(m_fd_sock,
reinterpret_cast<struct sockaddr *>(&server_addr_in),
sizeof(sockaddr)) == -1)
{
if(errno == EINPROGRESS)
{
fd_set t_fdset;
FD_ZERO(&t_fdset);
FD_SET(m_fd_sock,&t_fdset);
int nfds=m_fd_sock+1;
struct timeval timeout=SOCK_TIMEOUT;
int ret = select(nfds,NULL,(&t_fdset),NULL,&timeout);
if(ret == 1)
{
if(!FD_ISSET(m_fd_sock,&t_fdset))
{
m_errstr = "ERROR(Connect): error happened when connect to server. ";
m_errstr += "socket server ip is ";
m_errstr += m_ipaddr;
close(m_fd_sock);
m_fd_sock = -1;
return false;
}
int error=0, len=sizeof(int);
getsockopt(m_fd_sock, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
if(error != 0)
{
m_errstr = "ERROR(Connect): Exception happened when connect to server. ";
m_errstr += "socket server ip is ";
m_errstr += m_ipaddr;
close(m_fd_sock);
m_fd_sock = -1;
return false;
}
return true;
}
else if(ret == 0)
{
m_errstr = "ERROR(Connect): Timeout when connect to server. ";
m_errstr += "socket server ip is ";
m_errstr += m_ipaddr;
close(m_fd_sock);
m_fd_sock = -1;
return false;
}
else
{
m_errstr = "ERROR(Connect): Error happened when called select(). ";
m_errstr += "socket server ip is ";
m_errstr += m_ipaddr;
close(m_fd_sock);
m_fd_sock = -1;
return false;
}
}
else
{
close(m_fd_sock);
m_fd_sock = -1;
m_errstr = "ERROR(Connect): Failure when connect to server ";
m_errstr += m_ipaddr;
m_errstr += ", ";
m_errstr += strerror(errno);
return false;
}
}
发现不停的有返回ERROR(Connect): Error happened when called select(). 的记录,甚至于程序coredump,想请教各位是我的程序写得有问题还是系统对select调用有限制啊?
作者:
zxlzys
时间:
2007-09-20 19:07
errno 是多少?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2