免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2307 | 回复: 1
打印 上一主题 下一主题

sk_err_soft和 sk_err有什么区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-15 21:52 |只看该作者 |倒序浏览
下面是注释,这两个域是struct sock中的。
  1. *        @sk_err: last error
  2.   *        @sk_err_soft: errors that don't cause failure but are the cause of a
  3.   *                      persistent failure not just 'timed out'
复制代码
这里注释没太看懂, 不知道这两个错误有什么区别?为什么需要sk_err_soft?

我看了内核的代码基本上是在tcp_v4_err中调用的,而这个是被ICMP模块使用的。

接下来是延伸出来的一个问题。

主要是非阻塞的句柄,我们connect的问题,下面是man手册里面的:
EINPROGRESS
              The socket is nonblocking and the connection cannot be completed immediately.  It is possible to select(2) or  poll(2)  for  completion  by
              selecting the socket for writing.  After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET
              to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed
              here, explaining the reason for the failure).


可以看到要使用getsockopt进行检测,在内核中getsockopt就会检测sk_err以及sk_err_soft,而这里来说肯定是检测到sk_err_soft了,因为如果有sk_err则一定会上报一个err事件的,我这里就有问题了,就是为什么不在tcp_poll(它只会检测sk_err) 里面设置错误标记位?还有就是什么时候会出现返回可写(没有出错事件),而getsockopt又能检测到错误的。我自己模拟,可是怎么都无法模拟到这种情况,不知道谁知道如何来模拟这种情况。

谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-02-18 14:51 |只看该作者
好问题。没有相关研究,帮顶。

这个是合适的提问地方吗?
如果不合适,还有其他地方吗?
算合适,难道是没有牛人?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP