特定のプロトコルでシリアルポートにデータを書き込む機能があります。関数が 1 フレームを書き込むと、レシーバーの 1 つの応答を待ちます。応答が受信されない場合は、3 回のタイムアウト中にデータを再送信する必要があり、3 回のタイムアウトが成功しない場合は、通信を閉じます...
私はこの機能を持っています:
int serial_write(int fd, unsigned char* send, size_t send_size) {
......
int received_counter = 0;
while (!RECEIVED) {
Timeout.tv_usec = 0; // milliseconds
Timeout.tv_sec = timeout; // seconds
FD_SET(fd, &readfs);
//set testing for source 1
res = select(fd + 1, &readfs, NULL, NULL, &Timeout);
//timeout occurred.
if (received_counter == 3) {
printf(
"Connection maybe turned off! Number of resends exceeded!\n");
exit(-1);
}
if (res == 0) {
printf("Timeout occured\n");
write(fd, (&I[0]), I.size());
numTimeOuts++;
received_counter++;
} else {
RECEIVED = true;
break;
}
}
......
}
この関数がタイムアウトになった場合、データを再送信しないことを確認しました。なんで?