From: "Nobuyoshi.Nakada" Date: 2000-09-29T10:32:53+09:00 Subject: [ruby-list:25234] Re: ruby1.6.1(mswin32) での Telnet の不具合 なかだです。 At Fri, 29 Sep 2000 09:44:59 +0900 Akira Muraki wrote: > それはこういう勘違いをしてるんだよ等指摘有りましたら、よろしくお願いします。 すいません、[ruby-dev:10920]のバグです。 > >Errno::E10038: Unknown Error > >C:/ruby/lib/ruby/1.6/net/telnet.rb:471:in `select' winsock.h #define WSABASEERR 10000 #define WSAENOTSOCK (WSABASEERR+38) E10038(WSAENOTSOCK) ということはやっぱり select() は Event なんて受け 付けないのか。select() も中断できないかなと思ったんですが、myselect() は 元に戻してください。 diff -pruPX ./.excludes current/win32/win32.c devel/win32/win32.c --- current/win32/win32.c Wed Sep 27 18:11:13 2000 +++ devel/win32/win32.c Fri Sep 29 10:27:36 2000 @@ -1904,7 +1904,6 @@ myselect (int nfds, fd_set *rd, fd_set * long r; fd_set file_rd; fd_set file_wr; - fd_set trap; int file_nfds; int trap_immediate = rb_trap_immediate; @@ -1925,16 +1924,9 @@ myselect (int nfds, fd_set *rd, fd_set * if (wr) *wr = file_wr; return file_nfds; } - if (ex) - trap = *ex; - else - trap.fd_count = 0; - if (trap.fd_count < FD_SETSIZE) - trap.fd_array[trap.fd_count++] = rb_InterruptEvent; - // else unable to catch interrupt. if (trap_immediate) TRAP_END; - if ((r = select (nfds, rd, wr, &trap, timeout)) == SOCKET_ERROR) { + if ((r = select (nfds, rd, wr, ex, timeout)) == SOCKET_ERROR) { errno = WSAGetLastError(); switch (errno) { case WSAEINTR: -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦