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

Dav*_* S. 3 python sockets

我有一个简单的服务器/客户端.我使用netcat作为客户端来测试服务器.如果我在客户端退出之前停止服务器,我将无法再启动服务器一段时间,我发现此错误:"[Errno 98]地址已在使用中"

但如果我先关闭客户端,然后服务器停止,我将不会有这个问题.

我的服务器套接字如下:

try:
  s=socket
  s.bind(..)
  s.listen(1)
  conn,addr=s.accept()
finally:
  conn.close()
  s.close()
Run Code Online (Sandbox Code Playgroud)

我觉得服务器没有正确关闭套接字.但我不知道如何解决这个问题.

Dan*_*ach 9

你关闭插座就好了.但是,套接字在套接字关闭后继续使用资源几分钟,因此如果远程端错过了数据包,则可以重新发送数据包.

在致电之前,您应该可以通过拨打以下电话来解决问题bind:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Run Code Online (Sandbox Code Playgroud)

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