2

特定のプロトコルでシリアルポートにデータを書き込む機能があります。関数が 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;
            }

        }

......

}

この関数がタイムアウトになった場合、データを再送信しないことを確認しました。なんで?

4

0 に答える 0