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

时间:2015-04-24 21:39:12

标签: sockets python-2.7

我正在尝试编写一个非常简单的Python 2.7函数来侦听localhost端口上的套接字连接。

问题是:如果发生了什么不好的事情,我的代码是否负责杀死套接字,那么就不会晃来晃去?在什么情况下套接字错误会为我关闭套接字,这样我就不需要调用'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

在这里使用(比如说PORT参数是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...'

它似乎有效,但是我错过了任何会使套接字打开或导致其他任何不良事件发生的边缘情况吗?

0 个答案:

没有答案