LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 976|回复: 4

unix网络协议栈代码中的疑问(so_reuseaddr)

[复制链接]
发表于 2006-5-22 17:09:30 | 显示全部楼层 |阅读模式
最近刚看unix代码中关于so_reuseaddr的代码。有一个问题,希望大家给指点指点。

如果我第一次调用bind函数,并绑定一个[ip:127.0.0.1    port:52969]这样一个插口,同时在bind这个插口之前,我就指定了so_reuseaddr这个选项。
然后我又运行这个同样的程序,并绑定还是[ip:127.0.0.1      port:52969]这个插口,同时也指定so_reuseaddr这个选项,根据,源代码第二个绑定会成功的。可是实际上这是不对的。

我想问的事,源代码中我可能看漏了某一部分,不知道在哪里。

知道的帮我解答一下。
谢谢!

我看的源代码是stenvens的《tcp/ip详解-卷二实现》中的。
发表于 2006-5-22 18:45:02 | 显示全部楼层
我看UNP里是说bind不同ip的同一端口吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-22 19:25:12 | 显示全部楼层
那本书上也是第一次不用so_reuseaddr的二次才用。

我看到tcp/ip这本书有代码,就看了看,当两次都设置so_reuseaddr时,就好像不对了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-23 16:47:46 | 显示全部楼层
waiting
回复 支持 反对

使用道具 举报

发表于 2006-5-23 22:41:22 | 显示全部楼层
man 7 socket
SO_REUSEADDR
              Indicates that the rules used in validating addresses supplied in a  bind(2)
              call  should  allow reuse of local addresses. For PF_INET sockets this means
              that a socket may bind, except when there  is  an  active  listening  socket
              bound to the address.  When the listening socket is bound to INADDR_ANY with
              a specific port then it is not possible to bind to this port for  any  local
              address.
就是说只要ip,port没有被active listen, 就可以重新bind.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表