summaryrefslogtreecommitdiff
path: root/ext/socket
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-08-24 06:21:43 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-08-24 06:21:43 +0000
commitdea6ce41b404df35944ab6063c614497b1b2984e (patch)
tree154318e243567b27e3f8fae8fd301971d2d68be9 /ext/socket
parenta85a9d31db29e366cce9efb9c3fab24e750ed498 (diff)
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/socket.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index c65de566e4..c9df07c279 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1044,6 +1044,7 @@ s_accept(class, fd, sockaddr, len)
socklen_t *len;
{
int fd2;
+ int retry = 0;
rb_secure(3);
retry:
@@ -1053,6 +1054,12 @@ s_accept(class, fd, sockaddr, len)
TRAP_END;
if (fd2 < 0) {
switch (errno) {
+ case EMFILE:
+ case ENFILE:
+ if (retry) break;
+ rb_gc();
+ retry = 1;
+ goto retry;
case EINTR:
rb_thread_schedule();
goto retry;