python socket 地址重用的问题
我用python的socket模块先产生一个client_socket,设置SO_REUSEADDR,绑定端口60000,连接其他服务器再产生一个server_socke...
我用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
这个问题 自己解决了
所有的主流操作系统都能够支持特殊的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了 展开
先产生一个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
这个问题 自己解决了
所有的主流操作系统都能够支持特殊的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了 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询