Gregory P. Smith added the comment:

> I've always had an implicit understanding that calls with timeouts may, for 
> whatever reason, return sooner than requested (or later!), and the most 
> careful approach is to re-check the clock again.

exactly.  at the system call level you can be interrupted.  re-checking the 
clock is the right thing to do if the elapsed time actually matters.

> If we don't want select() to silently retry on EINTR, then I think we
should leave it alone.

We should go ahead and retry for the user for select/poll/epoll/kqueue.  If 
they care about being able to break out of that low level call due to a signal, 
they should set a signal handler which raises an exception.  I have *never* 
seen code intentionally get an EINTR exception from a select or poll call and 
have often seen code tripped up because it or a library it was using forgot to 
handle it.

We're a high level language: Lets be sane by default and do the most desirable 
thing for the user. Retry the call internally with a safely adjusted timeout:
  new_timeout = min(original_timeout, time_now-start_time)
  if new_timeout <= 0:
    return an empty list  # ie: the system clock changed
  retry the call with new_timeout

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue18885>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to