From 18efb38b210db318380f92d549cbf9400fb88ad8 Mon Sep 17 00:00:00 2001 From: eban Date: Thu, 12 Jul 2001 06:16:49 +0000 Subject: * ext/socket/socket.c (ruby_connect): workaround for the setup of Cygwin socket(EALREADY). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/socket.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'ext') diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 3ad5c7f5db..f0ed09bd98 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -709,6 +709,9 @@ ruby_connect(fd, sockaddr, len, socks) { int status; int mode; +#if defined __CYGWIN__ + int wait_in_progress = -1; +#endif #if defined(HAVE_FCNTL) mode = fcntl(fd, F_GETFL, 0); @@ -744,17 +747,23 @@ ruby_connect(fd, sockaddr, len, socks) #ifdef EINPROGRESS case EINPROGRESS: #if defined __CYGWIN__ - { - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = 100000; - rb_thread_wait_for(tv); - } + wait_in_progress = 10; #endif #endif thread_write_select(fd); continue; +#if defined __CYGWIN__ + case EALREADY: + case EINVAL: + if (--wait_in_progress > 0) { + struct timeval tv = {0, 100000}; + rb_thread_wait_for(tv); + continue; + } + break; +#endif + #ifdef EISCONN case EISCONN: status = 0; -- cgit v1.2.3