2
私はselectを使用して2つのソケットから読み取っていますが、各ソケットから1つのメッセージしか送信しません。選択は決してタイムアウトしないようですが、常に同じメッセージを1つまたは2つ返します。 whileループを実行するたびにselectパラメータをリセットします。ここでSelectは常にデータを返します
は私のコードです:
while(1)
{
FD_ZERO(&master);
for (i = 0; i < fdmax; i++)
{
FD_SET(sock_list[i], &master);
}
tv.tv_sec = 1;
tv.tv_usec = 300;
int sel = select(fdmax, &master, NULL, NULL, &tv);
if (sel > 0)
{
for (i = 0; i < fdmax; i++)
{
if (FD_ISSET(i, &master))
{
recv_msg(i, buf);
print("msg from %d: %s %d %d\n", i, buf, sel, tv.tv_sec);
}
}
}
}
誰もが私の選択に問題があることを見ていますか?
を問題があります'recv_msg'のほうがデータを読むことが決してないので、' recv_msg'の可能性が高いです。したがって、 'select'は利用可能なデータを示しています – Kninnug
しましたrecv_msgが機能することを確認しますか? – pm100
'recv_msg'の戻り値をチェックしません。ソケットが閉じているか、読み取りエラーがあるかどうかを確認します。それらのソケットを閉じ、あなたのリストからそれらを削除します。 – jxh