Q: simple sockets, bind, and socket error 10048

Discussion in 'Python' started by Johannes Eble, Jul 16, 2003.

  1. 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
    Johannes Eble, Jul 16, 2003
    #1
    1. Advertising

  2. In article <>, Johannes Eble wrote:

    > 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.


    The port can't be used because it's still in use. When you
    close a TCP connection, it doesn't go away immediately. It
    goes into a "wait" state for several minutes just in case there
    are packets belonging to that connection wandering around the
    internet. If you want to skip that waiting state (a decision
    which a small risk associated), set the SO_REUSEADDR option on
    the socket.

    > I do not understand why the port is still in use.


    Stevens chapter 18:

    http://www.amazon.com/exec/obidos/A...8357912/sr=2-1/ref=sr_2_1/103-3800181-0657431

    --
    Grant Edwards grante Yow! I like the way ONLY
    at their mouths move... They
    visi.com look like DYING OYSTERS
    Grant Edwards, Jul 16, 2003
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Tim Black
    Replies:
    1
    Views:
    1,076
    Alan Kennedy
    Aug 3, 2004
  2. Laszlo Nagy
    Replies:
    1
    Views:
    4,755
    Mark Wooding
    Jan 27, 2009
  3. Jean-Paul Calderone
    Replies:
    0
    Views:
    942
    Jean-Paul Calderone
    Jan 27, 2009
  4. Laszlo Nagy
    Replies:
    0
    Views:
    524
    Laszlo Nagy
    Feb 1, 2009
  5. Junfeng Hu
    Replies:
    12
    Views:
    1,098
    Junfeng Hu
    Nov 19, 2011
Loading...

Share This Page