low level networking in python

Irmen de Jong irmen.NOSPAM at xs4all.nl
Wed Apr 4 12:50:46 EDT 2007


Maxim Veksler wrote:

> I'm trying to bind a non-blocking socket, here is my code:
> """
> #!/usr/bin/env python
> 
> import socket, select
> from time import sleep
> 
> s_nb10000 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s_nb10000.setblocking(0)
> 
> s_nb10000.bind(('192.168.2.106', 10002))
> s_nb10000.listen(5)
> 
> while 1:
>   conn, addr = s_nb10000.accept()
>   ready_to_read, ready_to_write, in_error = select.select([conn], [], 
> [], 0)
>   print (ready_to_read, ready_to_write, in_error)
>   sleep(100)
> 
> s_nb10000.close()
> """
> 
> And this is the exception I'm getting:
> """
> python non_blocking_socket.py
> Traceback (most recent call last):
>  File "non_blocking_socket.py", line 13, in ?
>    conn, addr = s_nb10000.accept()
>  File "/usr/lib/python2.4/socket.py", line 161, in accept
>    sock, addr = self._sock.accept()
> socket.error: (11, 'Resource temporarily unavailable')
> """
> 
> What am I doing wrong here?

Nothing.
Any operation on a non-blocking socket that is usually blocking
(this includes accept(), bind(), connect(), recv with MSG_WAITALL)
can possibly return a socket.error with errno set to EAGAIN.
('resource temporarily unavailable').
If this happens you should use a select() on the socket to
wait until it's done with the requested operation.

--Irmen

> 
> p.s.
> I've looked at twisted before posting this post. I've seen they
> impelement alot of application level protocols but I didn't see much
> treatment for low level "raw" network data, not to mention that it's a
> way way over kill for what I'm asking to achieve. Twisted does have a
> subproject called "Twisted Pair: Low-level networking" but sadly it's
> unmaintained and undocumented.
> 
>> Mike
>>
> 
> Maxim.
> 
> 



More information about the Python-list mailing list