我可以在TCP套接字上一次写入多少字节?

Jus*_*ing 5 c sockets buffer byte tcp

正如标题所说,在面向连接的套接字上一次可以写入的字节数是否有限制?

如果我想发送一个缓冲区,例如1024字节,我可以使用a

write(tcp_socket, buffer, 1024);
Run Code Online (Sandbox Code Playgroud)

或者我应该write()为每个使用较少字节数的多个调用?

hmj*_*mjd 9

write()不保证将写入所有字节,因此需要多次调用write().从男人写:

如果,例如,底层物理介质上没有足够的空间,或者遇到RLIMIT_FSIZE资源限制(请参阅setrlimit(2)),或者调用被信号处理程序中断后,写入的字节数可能小于count写得少于计数字节.(另见管道(7).)

write()返回写入的字节数,因此必须保留写入的字节的运行总数,并将其用作索引buffer并计算要写入的剩余字节数:

ssize_t total_bytes_written = 0;
while (total_bytes_written != 1024)
{
    assert(total_bytes_written < 1024);
    ssize_t bytes_written = write(tcp_socket,
                                  &buffer[total_bytes_written],
                                  1024 - total_bytes_written);
    if (bytes_written == -1)
    {
        /* Report failure and exit. */
        break;
    }
    total_bytes_written += bytes_written;
}
Run Code Online (Sandbox Code Playgroud)