ソケットのリストを反復処理し、それらにパケットを送信し、応答があった場合は特定のソケットに送り返すコードをいくつか書きました。
これが私のコードのスニペットです:
while ((curr_fd = conn_get_node()) > 0) {
send(curr_fd, fifo_packet.packet, MSGLENGTH, 0);
FD_ZERO(&rfds);
FD_SET(curr_fd, &rfds);
got_answer = select(curr_fd + 1, &rfds, NULL, NULL,
&tv);
if (got_answer == -1) {
perror("select()\n");
} else if (got_answer == 1) {
get_packet(curr_fd, &answer);
send(fifo_packet.from_fd, &answer, MSGLENGTH, 0);
} else {
printf("no data within 100us\n");
continue;
}
これで、送信された最初の 2 つまたは 3 つのパケットについて、select は常に何も受信しなかった (got_answer = 0) と言うことがわかりますが、データがスニファーで到着したことがわかります。約 3 番目のパケットの後、機能し始めます (got_answer = 1)。
誰かが私が間違っていることを知っていますか?
私はあなたの助けに感謝します。