思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

ついで

2月の頭ごろに公開デバッグしたTelexクラスにはさらに深刻なバグがあった氏にたい|||。n_
↓Receive()の中をこんなかんじみたくしてnb==0になるのを避けないと、待ってる間回り続けてCPU時間を消費するという、、orz

            // 読み出す
            DWORD nbMax = bufSz - wp;   // LineSizeMax以上は保証される
            if (nb > nbMax)
                nb = nbMax;
            else if (nb == 0)
                nb = 1;
            socket.SetTimeout(uTimeout);
            int n = socket.Receive(buf + wp, nb);
            socket.KillTimeout();
            if (n == SOCKET_ERROR) {
                bTimeout = (socket.GetLastError() == WSAEINTR);
                if (bTimeout) {
                    ERRC(ETMO, "受信タイムアウト");
                } else {
                    ERR("Receive()失敗");
                    socket.Close();
                }
                return false;
            } else if (n == 0) {
                if (!socket.IOCtl(FIONREAD, &nb)) {
                    ERR("Socket切断");
                    buf[wp] = '\0';
                    return false;
                    /*= ここに来たときrp == wpのままなので、
                     *  空文字列を返すしかない。
                     */
                }
            }
            wp += n;