代码之家  ›  专栏  ›  技术社区  ›  David S.

在Python2.6中,关闭套接字的正确方法是什么?

  •  3
  • David S.  · 技术社区  · 14 年前

    我有一个简单的服务器/客户机。我使用netcat作为客户机来测试服务器。如果在客户机退出之前停止服务器,我将暂时无法再次启动服务器,并出现以下错误: “ [errno 98]地址已在使用中 “

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

    我的服务器套接字的工作方式如下:

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

    我觉得服务器没有正确关闭插座。但我不知道怎么解决这个问题。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Daniel Stutzbach Edward Leno    14 年前

    你把插座关上了。然而,在套接字关闭后,套接字继续使用资源几分钟,这样,如果远程端错过了一个包,则可以重新发送该包。

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

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

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