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

标签 python sockets

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

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

我的服务器套接字是这样工作的:

try:
  s=socket
  s.bind(..)
  s.listen(1)
  conn,addr=s.accept()
finally:
  conn.close()
  s.close()

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

最佳答案

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

您应该能够通过在调用 bind 之前调用以下命令来解决它:

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

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

关于python - 在 python 2.6 中关闭套接字的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765152/

相关文章:

linux - 在服务器端,获取客户端连接的服务器IP

javascript - 使用socket-io制作一个基本的聊天应用程序

带有 SSL 错误的 Python3 套接字编程?

python - 如何向 json 字典添加键值列表

python - 将嵌套字典传递给请求模块

c# - 异步套接字-标识唯一的连接

flash - 柔性 socket 连接

python - Go 子进程通信

如果未找到,则带有可选结果的 Python 赋值

python - 将 OpenCV 文档添加到 PyCharm