patch

どうやら、MAX_SECS_TO_LINGERは30らしい。
MAX_SECS_TO_LINGERは16に書き変えて、select()で受信可能になるまで
待ってみるコードを作ってみた。とりあえず、動いてるっぽい。
とりあえず、火曜日に内部で報告してみよう。

    fd_set rfds;

    while (1) {
        tv.tv_sec = SECONDS_TO_LINGER;
        tv.tv_usec = 0;
        FD_ZERO(&rfds);
        FD_SET(s, &rfds);
        if(select(s+1, &rfds, NULL, NULL, &tv) > 0) {
            if(FD_ISSET(s, &rfds)) {
                nbytes = jk_tcp_socket_recvfull(s, dummy, sizeof(dummy));
                if (nbytes <= 0)
                    break;
            }
        }

        ttl += SECONDS_TO_LINGER;
        if (ttl > 16)
            break;
    }