strombrg at gmail.com
Sat Mar 8 18:39:17 CET 2008
On Sun, 02 Mar 2008 23:05:27 -0500, Roy Smith wrote:
> In article
> <a983ed83-34cb-49f0-944c-e0600cbb3a2f at 2g2000hsn.googlegroups.com>,
> Gabriel Genellina <gagsl-py2 at yahoo.com.ar> wrote:
>> On 2 mar, 17:21, castiro... at gmail.com wrote:
>> > This worked:
>> > import socket
>> > from time import time
>> > for i in range( 20 ):
>> > HOST = ''
>> > PORT = 80 #<----
>> > s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>> > s.bind((HOST, PORT))
>> > print( 'listen' )
>> > s.listen(1)
>> > conn, addr = s.accept()
>> > print( 'connected', addr )
>> > print( conn.recv( 4096 ) ) #<----
>> > conn.send( bytes('<html><body>test %f</body></
>> > html>'%time(),'ascii') )
>> > conn.close() #<----
>> > s.close()
>> > ... and connect with a browser: http://localhost/if it's internet
>> > exploder.
>> Note that there is no need (nor is desirable) to close and rebind the
>> listening socket for each connection.
> I'd say, "nor is desirable", is an understatement. On most systems, an
> attempt to re-bind to a given port number soon after it was unbound will
> fail (unless you utter magic ioctl incantations). This will manifest
> itself in the s.bind() call raising an exception on the *second* pass
> through the loop.
I believe the incantation may be setsockopt(), not ioctl(), but if
there's an ioctl() way of doing it, i'd be interested in seeing it.
More information about the Python-list