On 2/3/11 10:13 AM, Dwayne Blind wrote: > Thanks for your answer. I don't want to reset my socket. I want to apply > the timeout to the rcv method only.
Setting the timeout does not "reset [your] socket", I don't think. And I get that you want to only timeout recv... that's why I pointed out its a socket method, not an argument to recv. If you don't want it to apply to everything else, you just have to be sure to change it back after recv. Just: timeout = s.gettimeout() s.settimeout(3) s.recv(1024) s.settimeout(timeout) Personally, I'd prefer to do: with timeout(s, 3): s.recv(1024) That's a lot more clear, and I'd roll this context manager to accomplish it: --- start from contextlib import contextmanager @contextmanager def timeout(sock, timeout): old_timeout = sock.gettimeout() sock.settimeout(timeout) try: yield sock finally: sock.settimeout(old_timeout) --- end The contextmanager decorator is an easy/quick way of making a context manager. Everything up until the yield is executed before the 'with' block is run, and everything after the yield is executed after the 'with' block concludes. If the with block throws an exception, it'll be catchable at the yield point. -- Stephen Hansen ... Also: Ixokai ... Mail: me+list/python (AT) ixokai (DOT) io ... Blog: http://meh.ixokai.io/
signature.asc
Description: OpenPGP digital signature
-- http://mail.python.org/mailman/listinfo/python-list