Q: simple sockets, bind, and socket error 10048

Johannes Eble skywalkerpackage at hotmail.com
Wed Jul 16 07:31:22 EDT 2003


Hello Python community,

I am trying the echo-client and echo-server examples in Chapter 10,
"Programming Python" by Mark Lutz.
It is probably the most simple sockets sample: A socket server just
echoing the socket clients' requests.

The program works so far. I first start the server in one dos box,
then the client in another dos box on my machine.

However, I wonder why the client always gets a new port. This is
printed in the server's dos box:

g:\WingIDE\profiles\Johannes Eble\sock>python echo-server.py
Server connected by ('127.0.0.1', 1048)
Server connected by ('127.0.0.1', 1049)
Server connected by ('127.0.0.1', 1050)
Server connected by ('127.0.0.1', 1056)
Server connected by ('127.0.0.1', 1057)
Server connected by ('127.0.0.1', 1058)

Note that I start a client one by one (in the same client's dos box).
It seems that the older port numbers can't be used anymore even if the
client is closing the connection and terminating.

I have tried to bind the client to port 4000. I can start the client
one time without an error. But the second time I get a socket error:

g:\WingIDE\profiles\Johannes Eble\sock>python echo-client.py
Client has socket address '127.0.0.1' 4000
Client received: 'Echo=>Hello network world'

g:\WingIDE\profiles\Johannes Eble\sock>python echo-client.py
Traceback (most recent call last):
  File "echo-client.py", line 18, in ?
    sockobj.connect((serverHost, serverPort))
  File "<string>", line 1, in connect
socket.error: (10048, 'Address already in use')


I do not understand why the port is still in use. Why can't I define a
constant socket address for my client? Doesn't Python release the
client's port address as soon as the client calls close() on its
socket object or, at latest, when the client process terminates? I
have tried a

sockobj.shutdown(2)

on the client (before close() ) without an effect.


Any help would be great.


Regards


Johannes









More information about the Python-list mailing list