Socket question: arbitrary port

Robert W. Bill rbill at digisprings.com
Fri Jul 28 12:12:03 EDT 2000


On 28 Jul 2000, Mitchell Morris wrote:

> rbill at digisprings.com (Robert W. Bill) wrote in 
> <Pine.LNX.4.10.10007271034460.31368-100000 at localhost.localdomain>:
> 
> >
> >On Thu, 27 Jul 2000, Jean Bergeron wrote:
> >
> >> Is it possible to connect a socket through an arbitrary port?
> >> In other words, can Python find an available port without having the
> >> programmer (or user) specify a particular port number?
> >> 
> >> Any help would be appreaciated!
> >> Thanks!
> >> 
> >My understanding is (assuming you're talking AF_INET) is that
> >it requires a port for the bind call for a server socket and a destination
> >port to connect to for a client socket. So you would have to
> >identinfy the port for those calls. 
> >i.e.-
> >import socket
> >
> >s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> >#you need a connect or bind to do something with it
> >s.bind('127.0.0.1', 80) #second num is port
> >s.connect('www.python.org', 80) #same here- need destination port num
> >
> >the lazy persons's method to pick the first available port (warning: bad
> >idea/example):
> >
> >portNum = 1
> >while 1:
> >    try: 
> >     s.bind('127.0.0.1', portNum)
> >     break
> >    except socket.error, why:
> >     # could analyze why here 
> >     portNum = portNum + 1
> >
> >--replace the above s.bind with s.connect('someplace', portNum), and you
> >have a great way to stir trouble :)
> >
> >Without details I might have missed the point, but the generalized answer 
> >is you provide a port for connect/bind in your program by some means
> >rather than python picking it.
> >
> >-robert
> >
> >
> 
> Ewwwwwwww .... don't ever ever ever do that again. Bad dog! No biscuit!
> 
> Contrary to your reasoning, you only need bind *OR* connect. If you're 
> going to listen, you bind. If you're not going to listen, you connect. I 
> would swear this is in the Python distribution somewhere. [rummaging about 
> in the directory tree] There is an example in Lib/test/test_socket.py in 
> your Python distribution. An even shorter example is here:
> 
> C:\>python
> Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> import socket
> >>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
> >>> s.connect(('www.pythonlabs.com', 80))
> >>> s.send('GET / HTTP/1.0\r\n\r\n')
> 18
> >>> print s.recv(8192)
> [deletia]
> >>> s.close()
> 

Mitchell,

Consult line #9 of my reply and note the use of the word *or*!!!!!!

I want my bisquit! :)

-robert




More information about the Python-list mailing list