したがって、TCP でパケットを送信する次のコードがあります。それはかなりうまくいっています。部分的な書き込みをテストするだけです。そのため、sendbuf を 1 に設定するか、以下に示すようにハックを実行して、一度に 1 バイトを書き込みます。tcpdump を取得したとき、最初のバイト以外はすべて正しくありませんでした..何が間違っているのでしょうか?
int tmi_transmit_packet(struct tmi_msg_pdu *tmi_pkt, int len, int *written_len)
{
int bytes;
// This works
bytes = write(g_tmi_mgr->tmi_conn_fd, (void*) tmi_pkt, len);
// This doesn't:
// bytes = write(g_tmi_mgr->tmi_conn_fd, (void*) tmi_pkt, 1);
if (bytes < 0) {
if (errno == EAGAIN) {
return (TMI_SOCK_FULL);
}
return (TMI_WRITE_FAILED);
} else if (bytes < len) {
*written_len += bytes;
tmi_pkt += bytes;
return (tmi_transmit_packet(tmi_pkt, len - bytes, written_len));
} else {
*written_len += len;
}
return TMI_SUCCESS;
}