sockets - recv with time out

Joseph A Knapka jknapka at earthlink.net
Fri Jan 11 20:39:29 CET 2002


Joseph A Knapka wrote:
> 
> Steve Holden wrote:
> >
> > "David Bolen" <db3l at fitlinxx.com> wrote in message
> > news:uy9j5a0ds.fsf at ctwd0143.fitlinxx.com...
> > > westernsam at hotmail.com (sam) writes:
> > >
> > > >                            I know generally this should be handled
> > > > better, but seeing as am working with what I'm given is there a way I
> > > > can do a recv with a timeout (to throw an exception, when the timeout
> > > > is reached)? Is this something that can be achieved with non-blocking
> > > > sockets and if so how?
> > >
> > > Typically you'd select() on the socket before doing the recv() - the
> > > select() can have a timeout.  Shouldn't be any particular need for
> > > non-blocking sockets.
> > >
> > Erm, how would you do a recv() when your program is blocked waiting for
> > select() to return? Non-blocking sockets are an absolute necessity for this
> > application, and timeoutsocket is the best solution, as Oleg has already
> > said.
> 
> Er... how's that? Given the OP's stated requirements,
> what's wrong with:
> 
> timeout = 10 # seconds
> readable = select([sock],None,None,timeout)
> if readable:
>     data2 = sock.recv()
> 
> ????

Well, except for the fact that it's wrong, of course :-)
Maybe

(readable,wr,ex) = select([sock],None,None,timeout)

would work better.

Cheers,

-- Joe
"I should like to close this book by sticking out any part of my neck
 which is not yet exposed, and making a few predictions about how the
 problem of quantum gravity will in the end be solved."
 --- Physicist Lee Smolin, "Three Roads to Quantum Gravity"



More information about the Python-list mailing list