クライアントからのソケット接続が利用可能かどうかを確認する C 関数を作成しています。入力バッファを変更しないように、MSG_PEEK で「recv」関数を使用します。
ただし、ソケット接続がクライアントによって閉じられると、'recv' は -1 を返すはずですが、そうではありません。クライアントが閉じた後、以下の関数の「recv」は常に 0 を返します。
char is_avail(int connection) {
char buffer;
int result = recv(connection,&buffer,1,MSG_PEEK);
if (result<0)
return 0;
else
return 1;
}
この件について何か理由はありますか?また、MSG_PEEK と MSG_WAITALL を組み合わせたいと考えています。私は試した:
recv(connection,&buffer,1,MSG_PEEK|MSG_WAITALL);
しかし、それは効果がありません。