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. > > -- http://mail.python.org/mailman/listinfo/python-list