使用Send()发送更大的数据
Sending data larger that MSS using send()
通过TCP插座发送数据的一般函数如下:
ssize_t send(int sockfd,const void *buffer,size_t长度,int 标志);
通常,如果数据大小比MSS更多,则TCP会片段片段。但是据说send()API将发送"长度"数据量,并返回任何可以将任何数据发送给传出缓冲区的数据及其责任检查返回值并重新发送剩余的数据。
所以我怀疑,那么,如果"长度"值大于MSS,则TCP不会自动碎片数据?如果否,那么我们如何使TCP用一个send()调用在内部片段?
通常,如果数据大小比MSS更多。
通常不是。总是。否则MSS没有可确定的含义。
,但据说send()API将发送"长度"数据数量,并返回任何可以将任何数据发送给传出缓冲区及其责任检查返回值并重新发送剩余数据的责任。
正确。
这两个陈述没有冲突。send()
将数据传输到套接字发送缓冲区;TCP将其从那里转移到网络,请注意MSS,拥塞,接收窗口等。
所以我怀疑,那么,如果"长度"值大于MSS,则不会自动破坏数据?
见上文。TCP处理套接字发送缓冲区中的内容,而不是提供给send()
的参数值。
如果否,那么我们如何使TCP用一个send()调用在内部片段?
?
你不能。您无法控制TCP分割。
对于流插座,如果长度超过单个数据包中的长度,则网络层确实会自动将其分为多个数据包。您几乎无法控制OS选择如何拆分流数据,有一些套接字选项会产生一定的影响(例如TCP_Nodelay),但是如果您在谈论大多数发送大数据包,则不会有很大的不同。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 在UNIX中通过recv/send交换数据时,如何正确使用缓冲区
- 使用Send()发送更大的数据
- 可以使用 MPI::Send 发送的最大数据量