python 利用 setsockopt 获得端口重用

Author Avatar
doubledna 2017 年 03 月 06 日

假如端口被 socket 使用过,并且利用 socket.close()来关闭连接,但此时端口还没有释放,要经过一个 TIME_WAIT 的过程之后才能使用,这是 TNN 的相当烦银的,为了实现端口的马上复用,可以选择 setsockopt()函数来达到目的。(以下是网上找到的一篇文章的一小段相关例子,试用之后,相当有效果,特此提取出来收藏)

端口复用的实现,我在这里用 Python 举个 TCP 端口复用的例子,UDP 套接字要做的完全一样。
import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

在绑定前调用 setsockopt 让套接字允许地址重用

tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

接下来两个套接字都也可以绑定到同一个端口上

tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))