[#30426] CGI でグラフを描くときにお勧めのライブラリは? — 堀川 久 <vzw00011@...>

こんにちは。

12 messages 2001/07/01

[#30453] syntax check without execution? — Tanaka Akira <akr@...17n.org>

最近、eRuby のまねごとをしていて、そのなかで Ruby のコードを生成してい

16 messages 2001/07/04
[#30455] Re: syntax check without execution? — matz@... (Yukihiro Matsumoto) 2001/07/04

まつもと ゆきひろです

[#30479] Object#dup — "Shin'ya Adzumi" <adzumi@...>

あづみです。

20 messages 2001/07/05

[#30512] open errno EALREADY triggerd — "Inoue" <inoue@...>

井上です。

16 messages 2001/07/08

[#30514] Ruby module frame work? — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2001/07/09
[#30515] Re: Ruby module frame work? — matz@... (Yukihiro Matsumoto) 2001/07/09

まつもと ゆきひろです

[#30529] InterBase を使用したい — "YOUJI KUROKAWA" <CQE10242@...>

環境

22 messages 2001/07/09

[#30530] Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...>

縄手@松江と言います。

17 messages 2001/07/09
[#30531] Re: Question about script on the book "Ruby nyuumon" — rubikitch <rubikitch@...> 2001/07/09

From: NAWATE Masahiko <agul@mag.shimane-u.ac.jp>

[#30533] Re: Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...> 2001/07/09

縄手@松江です。

[#30734] UML クラス図と Ruby の記述についての対応 — Ken-ichi HASHIMOTO <ken@...>

橋本@福井県在住です。

13 messages 2001/07/28

[#30764] int/int => float? — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

50 messages 2001/07/31
[#30785] Re: int/int => float? — Konishi@... (Hiromasa KONISHI) 2001/07/31

 KONISHI Hiromasaです。

[#30767] Re: int/int => float? — keiju@... (石塚圭樹) 2001/07/31

けいじゅ@日本ラショナルソフトウェアです.

[#30768] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30770] Re: int/int => float? — Take_tk <ggb03124@...> 2001/07/31

たけ(tk)です。

[#30771] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[ruby-list:30605] Re: open errno EALREADY triggerd

From: "Inoue" <inoue@...>
Date: 2001-07-11 06:25:28 UTC
List: ruby-list #30605
井上です。なんとか回避?できるようになりました。
以下、長文です。

私の環境で確認した出来事です。
OS WindowsNT4.0Server
$ uname  -a
CYGWIN_NT-4.0 ????? 1.3.2(0.39/3/2) 2001-05-20 23:28 i686 unknown
$ ruby --version
1.6.4 (2001-06-01) [i686-cygwin]
$ gcc --version
 2.95.3-4
xyzzy(エディタ)  0.2.1.198

テストプログラム test2.rb

require 'socket'
host = "www.yahoo.co.jp"
port = 80
path = "/"

sock = TCPSocket.open(host, port)
sock.print "GET / HTTP/1.0\n\n"
while sock.gets
  print $_
end
sock.close

このプログラムは、通常DOSで実行した場合は問題なく動きます。
しかし、xyzzyで動かすと、

test2.rb:10:in `open': errno EALREADY triggered - "connect(2)"
(Errno::EALREADY)
 from test2.rb:10

となります。

また、私のしょぼいライブラリを不可しただけで、

require 'mylib'      #<== 恥ずかしくて絶対にみせられない
require 'socket'
host = "www.yahoo.co.jp"
port = 80
path = "/"

sock = TCPSocket.open(host, port)
sock.print "GET / HTTP/1.0\n\n"
while sock.gets
  print $_
end
sock.close

を実行すると、DOSでも

test2.rb:10:in `open': errno EALREADY triggered - "connect(2)"
(Errno::EALREADY)
 from test2.rb:10

となります。(変なライブラリを書いただけでも起きたので、パニくりました。
ここの真相究明の方が、私にとっては重要事項(笑))


しかし、socket.cの file://部分を付加すると、上の2つは問題なく動作しました。
cygwin環境限定のソースを書きましたが、(ほぼ丸写し)私はあまり知識が無いの
で、
これを正しく直していただければ助かります。

問題が回避できましたが、これはどういう背景でおきたのでしょうか。
イベントの取りこぼし?(かなり想像)でしょうか?

とりあえず、xyzzyユーザーにも恩恵があるみたいなので、
原因の確信が持てた時点で xyzzy-mlに流そうと思います。
誰か的確なコメントで流してくれるといいけど・・・・

static int
ruby_connect(fd, sockaddr, len, socks)
    int fd;
    struct sockaddr *sockaddr;
    int len;
    int socks;
{
    int status;
    int mode;

#if defined(HAVE_FCNTL)
    mode = fcntl(fd, F_GETFL, 0);

#ifdef O_NDELAY
# define NONBLOCKING O_NDELAY
#else
#ifdef O_NBIO
# define NONBLOCKING O_NBIO
#else
# define NONBLOCKING O_NONBLOCK
#endif
#endif
#ifdef SOCKS5
    if (!socks)
#endif
    fcntl(fd, F_SETFL, mode|NONBLOCKING);
#endif /* HAVE_FCNTL */

    for (;;) {
#if defined(SOCKS) && !defined(SOCKS5)
 if (socks) {
     status = Rconnect(fd, sockaddr, len);
 }
 else
#endif
 {
     status = connect(fd, sockaddr, len);
 }
 if (status < 0) {
     switch (errno) {
              // この部分 私のあやふやな知識で解釈しながら書きました。(ほぼ
丸写し)
              file://case EALREADY:
              //  {
       //  struct timeval tv;
       //     tv.tv_sec = 0;
              //      tv.tv_usec = 100000;
 //     rb_thread_wait_for(tv);
 // }
 // thread_write_select(fd);
 // continue;
          //      break;
       case EAGAIN:
#ifdef EINPROGRESS
       case EINPROGRESS:
#endif
  thread_write_select(fd);
  continue;
#ifdef EISCONN
       case EISCONN:
  status = 0;
  errno = 0;
  break;
#endif
     }
 }
#ifdef HAVE_FCNTL
 fcntl(fd, F_SETFL, mode);
#endif
 return status;
    }
}

以上。


In This Thread