1

そのため、ACE を使用してマルチスレッド サーバーをセットアップしようとしています。recv()/send() のブロックを防ぐために、非ブロック クライアント ソケットを使用しています。問題は、recv() を使用し、クライアントが不当に切断された場合です。recv() の結果は、クライアントが切断されたことを示しません。接続を確認する他の方法はありますか。

ここに短いスニペットがあります

            char buffer[4096];
            ssize_t bytesReceived = peer.recv(buffer, sizeof(buffer));

            if (bytesReceived < 1 && errno != EWOULDBLOCK)
            {
                printf("Disconnected:\n");

            }
            else if (bytesReceived > 0)
            {
                buffer[bytesReceived] = '\0';
                printf(buffer);
            }

したがって、クライアントが切断された場合、recv は -1 を返しますが、errno は依然として EWOULDBLOCK です。

また、recv で短いタイムアウトを使用しようとしましたが、errno = ETIME(TIME-Out) を使用しない場合と同じ結果になります。

4

0 に答える 0