ThreadingTCPServer 如何设置端口重用
来源:互联网 发布:voa听力软件下载 编辑:程序博客网 时间:2024/05/17 06:06
一个典型的TCPServer的建立
#ThreadingTCPServer从ThreadingMixIn和TCPServer继承 #class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass server = ThreadingTCPServer(addr, MyStreamRequestHandlerr) server.serve_forever()
查看SocketServer.py的实现
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): """Constructor. May be extended, do not override.""" BaseServer.__init__(self, server_address, RequestHandlerClass) self.socket = socket.socket(self.address_family, self.socket_type) if bind_and_activate: self.server_bind() self.server_activate() def server_bind(self): """Called by constructor to bind the socket. May be overridden. """ if self.allow_reuse_address: self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(self.server_address) self.server_address = self.socket.getsockname()
可以看到,在init初始化里面就已经进行了bind操作,之后再单独设置server的socket选项将不起作用,这就是为什么很多人遇到了直接使用对象的setsockopt方法感觉没有生效,端口有TIME_WAIT的状态,再次运行程序仍然会报Address Already In Use 的错误。
server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
解决方案:
方案一
继承SocketServer.ThreadingTCPServer,在init之前设置allow_reuse_address = True(默认为False)
class EchoServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True daemon_threads = True def __init__(self, server_address, RequestHandlerClass): """Set up an initially empty mapping between a user' s nickname and the file-like object used to send data to that user.""" SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass)
方案二
重载Server_bind,在bind之前设置socket选项
def server_bind(self): """Called by constructor to bind the socket. May be overridden. """ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(self.server_address) self.server_address = self.socket.getsockname()
0 0
- ThreadingTCPServer 如何设置端口重用
- 设置端口可以重用 setsockopt()
- 端口重用(如何解除bind绑定)
- 端口重用(如何解除bind绑定)
- 端口重用
- 端口重用
- 网络通信---端口重用(如何解除bind绑定)
- linux端口重用
- TCP端口重用[转]
- windows的端口重用
- linux端口重用
- 端口重用 C++
- 端口重用打开cmdshell
- linux端口重用
- linux端口重用
- 转载 linux端口重用
- 端口重用 C++ (地址重用)
- C#重用UDP端口号
- 延展和协议
- C#写日志两个简单方法
- 怎么在eclipse中导入一个maven项目
- 借助网盘离线下载从官网下载DB2-Express C
- 敏捷负载测试
- ThreadingTCPServer 如何设置端口重用
- NSPredicate谓词搜索使用小记
- 从零开始学习jQuery
- HLJU 1223: 寻找区间和 (交替推进法)
- ASPxGridView 用法整理
- RHEL5.4 x86_64 使用CentOS5的更新源
- 信鸽推送_使用自定义参数
- jmx配置远程监控
- Leetcode[4]-Median of Two Sorted Arrays