在TCP连接中,发送的长度匹配recv的长度是否达到某个限制?

时间:2012-12-11 09:52:38

标签: tcp

我想知道当传递给send()的大小增加时,TCP / IP连接会发生什么。

在简单的TCP / IP连接中(默认属性,没有TCP / IP没有修复的错误),是否保证send()中传递的大小可能是recv()中的大小,也许达到一定限度?如果是,可以确定此限制吗?

2 个答案:

答案 0 :(得分:2)

每个send()发送的数据大小可能与每个recv()不匹配,因为接收方不知道消息的大小。例如:100字节的消息可以10个块或100个字节的单个镜头发送。

关于问题的第二部分,可以通过简单的调用确定最大发送缓冲区大小:

int sockbufsize = 0; size = sizeof(int); getsockopt(skt,SOL_SOCKET,SO_SNDBUF,(char *)& sockbufsize,& size); // skt是套接字描述符

答案 1 :(得分:2)

不,这不能保证。 TCP是一种流协议,它的套接字接口只保证字节流以正确的顺序传输而没有错误,仅此而已。当然,由于它保证了所有数据的正确发送,所发送的总字节数将是接收的总字节数。