python socket 地址重用的问题

Safin 2015-02-11 05:13:24
我用python的 socket模块

先产生一个client_socket , 设置SO_REUSEADDR,绑定 端口60000,连接其他服务器
再产生一个server_socket,设置SO_REUSEADDR,绑定端口60000,并且监听端口60000,accept其他客户端的连接
以上没有问题的,client_socket 能连上其他服务器,而其他客户端也能连上server_socket 但是 如果我把 1和2的步骤反过来

产生一个server_socket,设置SO_REUSEADDR,绑定端口60000,并且监听端口60000,accept其他客户端的连接
产生一个client_socket , 设置SO_REUSEADDR,绑定 端口60000,连接其他服务器 这样执行到第2部的时候,就出现 Address already in use
...全文
379 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Safin 2015-02-12
  • 打赏
  • 举报
回复
自己解决了 所有的主流操作系统都能够支持特殊的TCP套接字参数,通常叫做"SO_REUSEADDR",该参数允许应用程序将多个套接字绑定到本地的一个endpoint(只要所有要绑定的套接字都设置了SO_REUSEADDR参数即可)。BSD系统引入了SO_REUSEPORT参数,该参数用于区分端口重用还是地址重用,在这样的系统里面,上述所有的参数必须都设置才行 我的是mac系统,所以需要 #端口重用 self.__socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.__socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 这种情况下,就不会出现 address in use了

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

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