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