在使用select() 函数时 怎样判断套接字连接状态(断开或连接)????

奔跑吧猴哥 2005-10-12 10:43:04
在使用select() 函数时 怎样判断套接字连接状态(断开或连接)????
...全文
2227 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
cky41 2005-12-12
  • 打赏
  • 举报
回复
远程主机主动断开,select监视的socket马上会进入可读状态,然后会读到EOF(文件结束符)

如果是网线被拔(远程或是本地),哪只能通过超时判断了吧
wjlsmail 2005-10-26
  • 打赏
  • 举报
回复
Mark
LDD123 2005-10-26
  • 打赏
  • 举报
回复
拔掉网线导致无法通讯用select是监测不出的,
可以利用两边定时发心跳包来处理



LDD123 2005-10-26
  • 打赏
  • 举报
回复
如果FD_SET中的socket有数据或被断开的,会触发FD_SET中对应的读事件,
select会立刻返回,这时对这个socket进行recv,根据返回值是>0 =0就可
以判断是有数据还是连接被断开。
很土 2005-10-26
  • 打赏
  • 举报
回复
使用 select 函数后, 若是 Read 的 FDSet, 通过 FD_ISSET 判断是否收到信号, 若有信号则可以使用 recv(fd, @ch, 1, MSG_PEEK), 若接收尺寸为 0 则可以调用 close 关闭 socket
lirun 2005-10-21
  • 打赏
  • 举报
回复
异常中断,只能等待select超时,建议你使用send,recv函数族。
wohow 2005-10-13
  • 打赏
  • 举报
回复
有经验的人一看就知道你是怎么试的,可是你的测试涵盖多少环境?我只要举出一个反例就推翻你的结论,很遗憾,这个反例被我找到了。
奔跑吧猴哥 2005-10-12
  • 打赏
  • 举报
回复
TCP协义有判断超时的功能..在Windows下就有FD_CLOSE通知...
不知UNIX怎么处理????????
wohow 2005-10-12
  • 打赏
  • 举报
回复
单纯select函数做不到的。例如TCP连接上之后调用select,可是对方拔掉网线,select就监测不到。可以配合send试试。
奔跑吧猴哥 2005-10-12
  • 打赏
  • 举报
回复
回复人: tengulre(OpenSource) ( ) 信誉:100 2005-10-12 11:01:00 得分: 0


判断socket句柄是否大于0


----------------------------------------------------

socket句柄 在连接时就获得,怎么会改变呢???
yeehya 2005-10-12
  • 打赏
  • 举报
回复
判断是否连接正常,可以用一次通讯来测试,专门发送一个特定的包,等待一个特定的应答,只能这样老土吧.
yeehya 2005-10-12
  • 打赏
  • 举报
回复
faint,这个可以由自己定义的通讯协议来实现啊~
接受特定的命令类型,在client上在建立和退出时,发出相应的命令.如果是异常中断,只能通过超时来判断了吧.
是新手,能说的只有这些.
tengulre 2005-10-12
  • 打赏
  • 举报
回复
判断socket句柄是否大于0
奔跑吧猴哥 2005-10-12
  • 打赏
  • 举报
回复
难道没有高手???
chaolajiao 2005-10-12
  • 打赏
  • 举报
回复
vipiii 老兄, 你的方法很有效!

进来领分吧!!!!

http://community.csdn.net/Expert/topic/4322/4322297.xml?temp=8.353823E-02
vipiii 2005-10-12
  • 打赏
  • 举报
回复
to chaolajiao: 用strerror(errno)输出具体原因

^_^,wohow同志缺乏幽默感,就算我试错了,难道我不可以回这帖子么?
就算我不知道select的运行机制,难道我不可以回这帖子么?呵呵~
chaolajiao 2005-10-12
  • 打赏
  • 举报
回复
vipiii 真搞笑.

大家看看我的问题吧?
http://community.csdn.net/Expert/topic/4322/4322297.xml?temp=.993664 unix 下的socket 函数调用失败会写 errno. 哪位有 errno 的值 和 其对应意义 的 对照表???
vipiii 2005-10-12
  • 打赏
  • 举报
回复
很遗憾,我试过。
wohow 2005-10-12
  • 打赏
  • 举报
回复
vipiii(vipiii)有没有试过就说?知不知道select的运行机制?
vipiii 2005-10-12
  • 打赏
  • 举报
回复
对端断开时select会返回,有描述符可读。
这时read或recv会读到0字节。

要考虑超时和被中断的情况。
加载更多回复(2)

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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