Chinaunix
标题:
epool LT模式对端close 本端recv不到0
[打印本页]
作者:
kdkgod
时间:
2013-02-28 09:37
标题:
epool LT模式对端close 本端recv不到0
epoll LT模式,只有EPOLLIN的时候对端close,epoll_wait会recv 0,但是EPOLLIN|EPOLLOUT的时候对端close本端却收不到0,而是recv -1, strerror(errno):Connection reset by peer。
废话少说,直接上代码。还望高手指点! 3Q
epoll.tar.gz
(4.38 KB, 下载次数: 6)
2013-02-28 09:36 上传
点击文件名下载附件
代码
作者:
sonicling
时间:
2013-02-28 10:15
设置成阻塞才会有0
作者:
zimang
时间:
2013-02-28 10:44
回复
2#
sonicling
Are you sure?
作者:
kdkgod
时间:
2013-02-28 11:13
貌似不行哦。你看看我的源码,很简单的。将其设置为非阻塞也不行。recv -1
回复
2#
sonicling
作者:
linux_c_py_php
时间:
2013-02-28 11:13
可能是对端FIN了, 你还写, 对端给RST了, 这边的协议栈就知道peer close了, 于是Read也会通知你失败了.
这些都是正常现象, 出错和读0都要关闭连接, 有什么区别.
作者:
linux_c_py_php
时间:
2013-02-28 11:18
不过楼主的代码我看了, 是不可用的错误代码,
1, ET模式, 你却当LT来读, 注定会把连接挂起.
2, 写数据, 你却想当然的以为数据可以完全写出去, 你还需要学学write的返回值的概念.
作者:
kdkgod
时间:
2013-02-28 11:19
你说的有点道理,但是为什么ET模式下就可以recv 0呢。 并且LT模式下如果有EPOLLOUT的时候send也没有失败。。。。。
回复
5#
linux_c_py_php
作者:
kdkgod
时间:
2013-02-28 11:24
百思不得其解的就是LT模式下,EPOLLIN和EPOLLOUT同时存在对端close的时候recv为什么为-1。正常应该为0才对。
回复
6#
linux_c_py_php
作者:
linux_c_py_php
时间:
2013-02-28 11:28
linux_c_py_php 发表于 2013-02-28 11:18
不过楼主的代码我看了, 是不可用的错误代码,
1, ET模式, 你却当LT来读, 注定会把连接挂起.
你代码已经写错了, 先改成正确的.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2