On at least x86 linux 2.6.26 select() can return EAGAIN under load. I
guess this is what the commit message of 1.0.21.8 refers to as "what
happens in the wild" as EAGAIN is not mentioned in the select man
page.
(case err
(#.sb!unix:ebadf
(handler-descriptors-error))
(case err
(#.sb!unix:ebadf
(handler-descriptors-error))
+ ((#.sb!unix:eintr #.sb!unix:eagain)
t)
(otherwise
(with-simple-restart (continue "Ignore failure and continue.")
t)
(otherwise
(with-simple-restart (continue "Ignore failure and continue.")
- (simple-perror "Unix system call select() failed" :errno err))))
+ (simple-perror "Unix system call select() failed"
+ :errno err))))
#!+win32
(handler-descriptors-error))
((plusp value)
#!+win32
(handler-descriptors-error))
((plusp value)
defconstant("enoent", ENOENT);
defconstant("eexist", EEXIST);
defconstant("eintr", EINTR);
defconstant("enoent", ENOENT);
defconstant("eexist", EEXIST);
defconstant("eintr", EINTR);
+ defconstant("eagain", EAGAIN);
defconstant("s-ifmt", S_IFMT);
defconstant("s-ifdir", S_IFDIR);
defconstant("s-ifmt", S_IFMT);
defconstant("s-ifdir", S_IFDIR);
deferrno("ebadf", EBADF);
deferrno("enoent", ENOENT);
deferrno("eintr", EINTR);
deferrno("ebadf", EBADF);
deferrno("enoent", ENOENT);
deferrno("eintr", EINTR);
+ deferrno("eagain", EAGAIN);
deferrno("eio", EIO);
deferrno("eexist", EEXIST);
deferrno("eloop", ELOOP);
deferrno("eio", EIO);
deferrno("eexist", EEXIST);
deferrno("eloop", ELOOP);
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)