[mew-dist 26705] Re: フォールバック実験
Kyotaro HORIGUCHI
horiguti at example.com
2005年 11月 30日 (水) 21:45:01 JST
堀口@Meadow です.
> こうなってくると、Meadow のバグだと思います。
> 正常系はうまく動いているけど、エラー系にはバグがあるのでしょう。
即時に出ないエラー(ENOTCONN)を検知できませんでした.
Meadow3 r3991 ではできるようになりました. ただし現在ほかの面で少々
不安定でそのため NetInstall はとりあえず今週いっぱいは出ません. 今
週中にはまともに直る予定です.
Meadow3 を手元でコンパイルできる方は r3991 を, r3991が不安な方は
以下のパッチをあててコンパイルすればよいはずです(若干位置が違うか
もしれません).
ちなみにこのパッチをあててENOTCONN が出た場合には[mew-win32
04307]のコードを実行すると, エラー検出の際に
| SEN1: failed with code 10035
と出てきてプロセス自体は消えません. これでよいでしょうか.
なお, エラーコードが WSAENOTCONN = 10057 ではなくWSAEWOULDBLOCK
= 10035 になっているのは元の emacs がその後別の Winsock API を呼び
出して書き換えているせいです.
--
堀口恭太郎
Index: w32proc.c
===================================================================
--- w32proc.c (revision 3990)
+++ w32proc.c (revision 3991)
@@ -1332,11 +1332,21 @@
#ifdef MEADOW
if (wfds)
{
+ int i;
+ SELECT_TYPE efds = *wfds;
+ struct timeval tm = {0, 0};
+
+ nw = sys_select_socket (nfds, NULL, wfds, &efds, &tm);
+
+ /* merge retuend efds and wfds */
+ for (i = 0 ; i < nfds ; i++)
+ {
+ if (FD_ISSET (i, &efds))
+ FD_SET (i, wfds);
+ }
+
/* Assume this socket is waiting for connection of
non-blocking socket. */
- struct timeval tm = {0, 0};
- nw = sys_select_socket (nfds, NULL, wfds, NULL, &tm);
-
if (nw < 0)
return nw;
}
Mew-dist メーリングリストの案内