[前][次][番号順一覧][スレッド一覧]

ruby-changes:10928

From: nobu <ko1@a...>
Date: Sun, 22 Feb 2009 13:38:57 +0900 (JST)
Subject: [ruby-changes:10928] Ruby:r22504 (trunk): * ext/socket/init.c (s_recvfrom_nonblock): handles EAGAIN too.

nobu	2009-02-22 13:38:46 +0900 (Sun, 22 Feb 2009)

  New Revision: 22504

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22504

  Log:
    * ext/socket/init.c (s_recvfrom_nonblock): handles EAGAIN too.
    * ext/socket/init.c (s_accept_nonblock): ditto, and EPROTO depends
      on platforms.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/init.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22503)
+++ ChangeLog	(revision 22504)
@@ -1,3 +1,10 @@
+Sun Feb 22 13:38:44 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/socket/init.c (s_recvfrom_nonblock): handles EAGAIN too.
+
+	* ext/socket/init.c (s_accept_nonblock): ditto, and EPROTO depends
+	  on platforms.
+
 Sun Feb 22 13:03:12 2009  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* eval.c (ruby_options): the evaluater now expects iseq instead of tree.
Index: ext/socket/init.c
===================================================================
--- ext/socket/init.c	(revision 22503)
+++ ext/socket/init.c	(revision 22504)
@@ -192,8 +192,13 @@
     slen = recvfrom(fd, RSTRING_PTR(str), buflen, flags, (struct sockaddr*)&buf, &alen);
 
     if (slen < 0) {
-        if (errno == EWOULDBLOCK)
+	switch (errno) {
+	  case EAGAIN:
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+	  case EWOULDBLOCK:
+#endif
             rb_sys_fail("recvfrom(2) WANT_READ");
+	}
 	rb_sys_fail("recvfrom(2)");
     }
     if (slen < RSTRING_LEN(str)) {
@@ -455,8 +460,17 @@
     rb_io_set_nonblock(fptr);
     fd2 = accept(fptr->fd, (struct sockaddr*)sockaddr, len);
     if (fd2 < 0) {
-        if (errno == EWOULDBLOCK || errno == ECONNABORTED || errno == EPROTO)
+	switch (errno) {
+	  case EAGAIN:
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+	  case EWOULDBLOCK:
+#endif
+	  case ECONNABORTED:
+#if defined EPROTO
+	  case EPROTO:
+#endif
             rb_sys_fail("accept(2) WANT_READ");
+	}
         rb_sys_fail("accept(2)");
     }
     make_fd_nonblock(fd2);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]