我是否不需要关闭客户端套接字handle(conn),例如“ conn.close()”?
如果我运行多线程来处理客户端套接字fd(conn)。如果服务器运行时间过长,是否会导致内存泄漏?
如果client no调用conn.close(),服务器将不会关闭client socket fd吗?
以下是我的tcp-socket服务器代码:
# coding: utf-8
import socket
import os, os.path
import time
sockfile = "./communicate.sock"
if os.path.exists( sockfile ):
os.remove( sockfile )
print "Opening socket..."
server = socket.socket( socket.AF_UNIX, socket.SOCK_STREAM )
server.bind(sockfile)
server.listen(5)
print "Listening..."
while True:
conn, addr = server.accept()
print 'accepted connection'
while True:
data = conn.recv(1024)
if not data:
break
else:
print "-" * 20
print data
print "DONE" == data
if "DONE" == data:
# If I need to invoke conn.close() here?
break
print "-" * 20
print "Shutting down..."
server.close()
os.remove( sockfile )
print "Done"
根据文档,close
当套接字被垃圾回收时被调用。因此,如果您出于某种原因没有关闭它,则您的程序可能会很好。只要您的套接字对象确实被GC。
但是,作为标准做法,在完成代码处理后,必须关闭套接字或释放任何资源。
要在Python中管理套接字对象,请查看如何在Python中将套接字用作上下文管理器?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句