【发布时间】:2013-10-25 02:43:40
【问题描述】:
我正在使用一些看起来像这样的 Python:
HOST = '127.0.0.1'
PORT = 43434
single = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
single.bind((HOST, PORT))
except socket.error as e:
# Print an error, exit.
虽然它过去运行良好,但我们现在收到错误 [Errno 98] Address already in use。 SIGINT 处理程序关闭套接字连接,所以我不确定它是如何进入该状态的,但现在我只是试图修复它。
lsof 和 netstat 都表示没有使用该端口:
[$]> sudo netstat -an | grep 43434
[$]> sudo lsof -i :43434
TIME_WAIT 设置为 60 秒,根据/proc/sys/net/ipv4/tcp_fin_timeout,但在上次成功运行几小时后仍会出现错误。
我尝试(暂时)设置REUSEADDR(通过single.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)),但这似乎没有效果。
tarnation 发生了什么?我是否能够再次使用此端口而无需重新启动机器?
【问题讨论】:
-
您在拨打
bind之前是否拨打过setsockopt? -
@WaleedKhan 是的;它就在
try之前。
标签: python linux sockets networking