[Python-de] Socket bleibt offfen

Hartmut Goebel h.goebel at goebel-consult.de
Mi Mär 14 21:18:55 UTC 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hallo,

ich versuche gerade für einen Bugreport einen (fast) minimalen Socket
Server und Client zu bauen. Der Server soll einen Request bearbeiten und
sich dann beenden. Der Client liest nur vom Server.

Nachdem Client und Server ihre Arbeit getan haben, hängt aber noch eine
Socket-Verbindung in Status TIME_WAIT herum. Ich finde nicht, wo der
Haken ist. Nur, wenn ich das file.read() im Client weg lasse, wird der
Socket sauber geschlossen.

Was mache ich falsch?

...8<-------- Server -------
import SocketServer
import sys

MyRequestHandler = SocketServer.StreamRequestHandler

if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('', port)

d = SocketServer.TCPServer(server_address, MyRequestHandler)
print "Serving on %s port %s ..." % d.socket.getsockname()

# handle one request only
d.handle_request()
print d.socket
d.server_close()
...8<-----------------------

...8<-------- Client -------
import socket
import sys

if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('localhost', port)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address)

file = sock.makefile()
# wenn man die nächste Zeile weg laesst, schliesst der socket sauber
print file.read(),
file.close()
sock.close()
...8<-----------------------

- --
Schönen Gruß - Regards
Hartmut Goebel

Goebel Consult  -  Wir machen IT sicher  -  www.goebel-consult.de
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org

iQEVAwUBRfhmv8zajR0mSa83AQIingf+LFh3Z+z1TF52womIBytSrXa77adk6Hsg
LgRTfsBZm/dBt2DXFEx1XyudUmaX8AMN1x2QoOLnBakgji3QL2dOHZmXysL0fSeO
RtHN4CfQVkS2zl296FlXMAhxjx2f734RVUrH6aZhggrG8aeJsSLW1UHbYuMBZTbJ
6yioje4hS25HDCf7RCAZsrMT8UZ2b9OodazkqU7w7JVrcdisxVTquu9f3mfCsaTo
oOA3k5s5z0GO10PuyOf80ZBMjl8wTl/xxFZN//pDkPIM9Q6j1Jffre14egnZfrax
Ix+HVxn02n4bSuQuFehMYtj8qsOi6+aiBb6wHstndhOMAyulFiR0jw==
=vwaI
-----END PGP SIGNATURE-----