我正在尝试使用boost.asio库发送大量字节,如下所示:

void tcp_send(boost::asio::io_service &io, const char *dst_ip, uint16 dst_port)
{
    uint8 *sbuff;
    size_t slen;
    ip::tcp::socket sock(io);

    sock.connect(ip::tcp::endpoint(ip::address::from_string(dst_ip), dst_port));

    sbuff = new uint8[100412];
    sbuff[0] = 67;
    sbuff[1] = 193;
    sbuff[2] = 136;
    sbuff[3] = 60;

    boost::asio::async_write(sock, boost::asio::buffer(sbuff, 100412),
             boost::bind((&send_handler), placeholders::error));
}

当我使用wireshark检查传输字节数时,发送方总是只发送65536字节的数据,不包括TCP头字节。那么问题是什么呢?
有什么参数需要修改吗。
我在linux ubuntu上运行这个应用程序。看来传输字节的最大数目是2 ^ 16。

最佳答案

TCP是一个流。IP数据报或以太网帧中出现的字节数应该与您无关。
成功调用send并不一定意味着数据已经发送;只是TCP堆栈接受了数据并承诺发送它(除非指定PSH)。

08-04 10:59