"conn.close()"のようなクライアントソケットハンドル(conn)を閉じる必要がある場合はありませんか?TCPソケットサーバのクライアント接続fdがメモリリークの原因になりますか?
私はクライアントソケットfd(conn)をハンドリングするためにマルチスレッドを実行します。サーバーが長時間実行されるとメモリリークが発生しますか?
クライアントがconn.connect()を呼び出さない場合、サーバーはクライアントソケットfdを閉じませんか?続き
は私のTCPソケットサーバコードです:
# 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"
私の言語がPythonでない場合は、C++などのGCがないためです。 cliendソケットfdを閉じる必要がありますか? – scott1028