[#23805] net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp>

佐藤です。

26 messages 2000/07/12
[#23806] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23808] Re: net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp> 2000/07/12

佐藤です。

[#23809] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23811] Re: net/smtp — Minero Aoki <aamine@...> 2000/07/12

あおきです。

[#23812] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23890] Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...>

25 messages 2000/07/18
[#23895] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/18

わたなべです.

[#23896] Re: Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...> 2000/07/18

[#23897] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23898] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/19

わたなべです.

[#23899] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23923] Re: [ruby-dev:10353] Re: should prohibit `module_function' for class Class — Masatoshi SEKI <m_seki@...>

11 messages 2000/07/19

[#23940] String#unpack と scanf の関係 — kiwamu <kiwamu@...>

こんにちは。岡部@東京都立大学と申します。

16 messages 2000/07/20

[ruby-list:23631] Re: [mswin32] Ctrl-C while socket operation (Re: Ruby 1.4.5)

From: "Shigeo Kobayashi" <shigeo@...>
Date: 2000-07-01 02:50:03 UTC
List: ruby-list #23631
小林です。

----- Original Message -----
From: "Katsuyuki Komatsu" <komatsu@sarion.co.jp>
Subject: [ruby-list:23625] Re: [mswin32] Ctrl-C while socket operation (Re:
Ruby 1.4.5)


>
> いや、この時点ではaccept()しようとしているソケットと
> read()しようとしているソケットの2つを、timeoutがNULLで
> select()で待っている状態です。
>
> 別Rubyスレッドでsleep 1のループを入れるとtimeoutが
> 1秒になってCtrl-Cで1秒以内に止められるわけです。
> つまり、select()はCtrl-Cで止められないと。
>
そうですね。timeout!=NULLでも同じようです。

> accept()はCtrl-Cが効くのですが、
>
それで、 仕方なくノンブロッキングモードに移行
したという記憶があります。
# ところで、UNIX 上でノンブロッキングモードに
# 移行する方法をご存知ありませんか?
#  ioctlsocket(hServer,FIONBIO,&ulCmdArg);
# はコンパイルできない!

>
> そのまま使われたわけではないでしょうけど、このコードは、
> CPUが100%になるようなBusy Loopになっていてちょっといやですね。
>
しっかりつっこまれると思っていました。 ^^;;;
(気が付いても後のまつり)
実際は Loop に入る前に、Sleep しますが
その長さを決定するのがわずらわしいです。
accept() なら1秒以上 Sleep しても問題ない
と思いますが、その他はどうするか?
# もちろん、Sleep するのに select は使えません。

ただ、CTRL+C は別にしても、(UNIX では pthread
等)マルチスレッド環境では select が戻って来ない
と、全てのスレッドをきれいにシャットダウンできま
せん。
ノンブロッキングモードにするかタイムアウト後に
ポーリングする以外の方法を考えつかないので
私は、以下のようなやり方をよく使います。

例
 fd_set   set;
 int e;
 struct timeval tv;
 FD_ZERO(&set);

Retry:
 tv.tv_sec  =  1; // 1秒のタイムアウト
 tv.tv_usec =  0;
 FD_SET(fd,&set);
 e = select(fd+1,&set,NULL,NULL,&tv);
 if(!e) {
  if(DidUserRequestGlobalShutdown()) goto ShutdownThread;
  goto Retry;
 }

小林 茂雄
shigeo@tinyforest.gr.jp



In This Thread