Select会不会阻塞

羽飞 2012-06-26 10:58:04
环境:HP-UX hp12161 B.11.31 U ia64 0546304299
TCP客户端连接,connect成功,发送数据没有判断是否成功
用select检测接收数据,超时时间设置500s
代码:
struct timeval tm;
tm.tv_sec = m_iHeartBeat; //recv package timeout, default value 5s.
tm.tv_usec = 0;

int32 iRet;
fd_set read_set;
FD_ZERO(&read_set);
FD_SET(m_iSockFd, &read_set);
iRet=::select(m_iSockFd+1, &read_set, NULL, NULL, &tm);

用gdb64跟踪,发现一直阻塞在select函数,时间大概10小时
今天上午把TCP监听端口的程序(就是对应的服务器端)关掉,这个函数才返回

请教各位大侠,有没有什么情况会使select函数阻塞?
...全文
224 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyb_debug 2012-06-27
  • 打赏
  • 举报
回复

#define MS_TO_TV(tv, ms) do \
{ \
tv.tv_sec = ms/1000; \
tv.tv_usec = (ms % 1000)*1000; \
} while(0)


struct timeval tm;
MS_TO_TV(tm,500*1000)
羽飞 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

socket怎么设置的?
[/Quote]
默认设置
羽飞 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

跟踪一下,看看 m_iHeartBeat 具体值是多少?
[/Quote]
500s是正确的,gdb64跟踪
ouyh12345 2012-06-26
  • 打赏
  • 举报
回复
socket怎么设置的?
justkk 2012-06-26
  • 打赏
  • 举报
回复
跟踪一下,看看 m_iHeartBeat 具体值是多少?
薛定谔之死猫 2012-06-26
  • 打赏
  • 举报
回复
fcntl(sock, F_SETFL, O_NONBLOCK);//设置异步标志
先设置套接字属性,将其设置为异步模式后再用这个吧~

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧