Sockets 我什么时候应该在Python中的套接字上显式调用“close()”?

Sockets 我什么时候应该在Python中的套接字上显式调用“close()”?,sockets,python-2.7,Sockets,Python 2.7,我试图编写一个非常简单的Python2.7函数来侦听本地主机端口上的套接字连接 问题是:如果发生了一些不好的事情,我的代码何时负责终止套接字,这样就不会让它挂在那里了?在什么情况下,套接字错误会为我关闭套接字,这样我就不需要调用“close” 我不想因为旧端口保持打开状态而不得不用另一个端口重新开始测试 Python代码示例: def getconn(PORT,TIMEOUT_SECS): conn = '' try: HOST = ''

我试图编写一个非常简单的Python2.7函数来侦听本地主机端口上的套接字连接

问题是:如果发生了一些不好的事情,我的代码何时负责终止套接字,这样就不会让它挂在那里了?在什么情况下,套接字错误会为我关闭套接字,这样我就不需要调用“close”

我不想因为旧端口保持打开状态而不得不用另一个端口重新开始测试

Python代码示例:

def getconn(PORT,TIMEOUT_SECS):
     conn = ''
     try:
         HOST = ''
         s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         s1.settimeout(TIMEOUT_SECS)
         s1.bind((HOST, PORT))
         s1.listen(1)
         conn, addr = s1.accept()
         print('Connected by', addr)
    except socket.timeout as e:
         conn = 'socket timeout'
    except socket.error as e:
         conn = 'other socket error'
    except:
         conn = 'deaddead'
         if s1:
              s1.close()
    return conn
这里使用的端口参数是19111

def runtest01_normalpoll(PORT):
     conn = getconn(PORT, 10.0)
     if conn == 'socket timeout' or conn == 'other socket error' or conn == 'deaddead':
          print 'could not establish a connection...why you ask?', conn
     else:
          conn.close()
     print 'done...'
这似乎是可行的,但我是否遗漏了任何会使插座打开或导致任何其他不好情况发生的边缘情况