Python 2.6中关闭套接字的正确方法是什么?

3
我有一个简单的服务器/客户端系统。我使用netcat作为客户端测试服务器。如果在客户端退出之前停止服务器,我将无法再次启动服务器,并且会收到以下错误信息:
“[Errno 98] Address already in use”
但是,如果我先关闭客户端,然后再停止服务器,就不会出现这个问题。
我的服务器套接字工作方式如下:
try:
  s=socket
  s.bind(..)
  s.listen(1)
  conn,addr=s.accept()
finally:
  conn.close()
  s.close()

在我看来,服务器没有正确关闭套接字。但我不知道如何解决这个问题。

1个回答

9

您已经正确地关闭了套接字。但是,在套接字关闭后的几分钟内,套接字仍然会使用资源,因此,如果远程端错过了一个数据包,则可以重新发送该数据包。

在调用bind之前,您应该能够通过调用以下内容解决此问题:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

这将告诉操作系统您希望允许套接字的多个绑定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接