Python 插座连接赢了';我关不上?

Python 插座连接赢了';我关不上?,python,sockets,Python,Sockets,我试图编写一个简单的服务器程序,打印发送给它的数据,或者在数据为“退出”、“退出”或“停止”时退出: 它实现了我期望的功能,但当我尝试在服务器退出后再次运行服务器时,我会得到: Traceback (most recent call last): File "./s", line 14, in <module> server.bind((HOST, PORT)) File "/usr/lib/python2.7/socket.py", line 224, in met

我试图编写一个简单的服务器程序,打印发送给它的数据,或者在数据为“退出”、“退出”或“停止”时退出:

它实现了我期望的功能,但当我尝试在服务器退出后再次运行服务器时,我会得到:

Traceback (most recent call last):
  File "./s", line 14, in <module>
    server.bind((HOST, PORT))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
回溯(最近一次呼叫最后一次):
文件“/s”,第14行,在
server.bind((主机、端口))
文件“/usr/lib/python2.7/socket.py”,第224行,meth格式
返回getattr(self.\u sock,name)(*args)
socket.error:[Errno 98]地址已在使用中

我想这意味着连接没有关闭。我怎样才能关闭它来防止这种情况?我尝试了
conn.close()
,但没有解决任何问题。

您需要设置SO\u REUSEADDR标志

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

您需要设置SO_REUSEADDR标志

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

您需要设置SO_REUSEADDR标志

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

您需要设置SO_REUSEADDR标志

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

作为旁注,您的代码实际上不起作用。没有理由相信从
conn.recv
返回的每个缓冲区都是一条消息;它可以是半条消息,也可以是六条单独的消息。它可以在本地主机上进行简单的测试,但当您真正部署它时,90%的时间失败(或者,更糟糕的是,失败1%的时间,只足以使它无用,但不足以调试它)。顺便说一句,您的代码实际上不起作用。没有理由相信从
conn.recv
返回的每个缓冲区都是一条消息;它可以是半条消息,也可以是六条单独的消息。它可以在本地主机上进行简单的测试,但当您真正部署它时,90%的时间失败(或者,更糟糕的是,失败1%的时间,只足以使它无用,但不足以调试它)。顺便说一句,您的代码实际上不起作用。没有理由相信从
conn.recv
返回的每个缓冲区都是一条消息;它可以是半条消息,也可以是六条单独的消息。它可以在本地主机上进行简单的测试,但当您真正部署它时,90%的时间失败(或者,更糟糕的是,失败1%的时间,只足以使它无用,但不足以调试它)。顺便说一句,您的代码实际上不起作用。没有理由相信从
conn.recv
返回的每个缓冲区都是一条消息;它可以是半条消息,也可以是六条单独的消息。它可以在本地主机上进行简单的测试,但当您真正部署它时,90%的时间失败(或者,更糟糕的是,失败1%的时间,只足以使它无用,但不足以调试它)。