免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: suposonic
打印 上一主题 下一主题

非阻塞socket,如何检测出断连、无效socket两个异常? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-03 11:30 |只看该作者
1.端口不存在

      很幸运,对于端口不存在,对方(linux)在IP层会直接发一个RST(Reset)响应直接终止 ...
黑色阳光_cu 发表于 2010-06-03 11:05



    终止了,但是select返回的结果为啥不对呢?

论坛徽章:
0
12 [报告]
发表于 2010-06-03 11:38 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-06-03 11:52 编辑
终止了,但是select返回的结果为啥不对呢?
suposonic 发表于 2010-06-03 11:30



好像windows和linux的select返回值还不大一样。
一个原则,返回可读写时,先看看$#$error_set是不是为-1。满足了这个条件,接下来的send recv不会被阻塞。然后检测send recv的返回值。

论坛徽章:
0
13 [报告]
发表于 2010-06-03 11:45 |只看该作者
您有没有email,能不能直接邮件联系您?

论坛徽章:
0
14 [报告]
发表于 2010-06-03 12:07 |只看该作者
对于select来说:

一个读事件(要读取的数据已到达)
一个写事件(数据现在可以写入)
一个异常(带外数据到达)

论坛徽章:
0
15 [报告]
发表于 2010-06-03 12:55 |只看该作者
对于select来说:

一个读事件(要读取的数据已到达)
一个写事件(数据现在可以写入)
一个异常(带外数据到 ...
黑色阳光_cu 发表于 2010-06-03 12:07



    如上我是了解,如果按照如上描述,当端口不可以达(主机IP可达,Port没有监听)的时候,select结果也是 正常的(我在aix、sun、linux上都尝试了,结果一样),这种情况,使用send、与recv去检查是不是不合理。

有没有更好的解决办法。

论坛徽章:
0
16 [报告]
发表于 2010-06-03 13:10 |只看该作者
请教一下,$#$read_set是什么啊?

$#不是数组的最后一个元素的索引么?

论坛徽章:
0
17 [报告]
发表于 2010-06-03 13:41 |只看该作者
如上我是了解,如果按照如上描述,当端口不可以达(主机IP可达,Port没有监听)的时候,select结 ...
suposonic 发表于 2010-06-03 12:55



select只有可读 可写 出错3个事件
试试epoll?

http://search.cpan.org/~brucek/IO-Epoll-0.01/lib/IO/Epoll.pm

论坛徽章:
0
18 [报告]
发表于 2010-06-03 13:56 |只看该作者

This is just for Liunx .
IO::Epoll - Scalable IO Multiplexing for Linux 2.5.44 and higher

太有局限性了, 还有其他的可以尝试使用了吗?

论坛徽章:
0
19 [报告]
发表于 2010-06-03 13:58 |只看该作者
回复 12# 黑色阳光_cu


    请教一下,$#$read_set是什么啊?

$#不是数组的最后一个元素的索引么?

论坛徽章:
0
20 [报告]
发表于 2010-06-03 14:06 |只看该作者
This is just for Liunx .
IO::Epoll - Scalable IO Multiplexing for Linux 2.5.44 and higher
...
suposonic 发表于 2010-06-03 13:56


我知道的,最可靠的办法就是那个了select检测readable writable 然后尝试读写
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP