1

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

在一个简单的 TCP/IP 连接中(默认属性,没有 TCP/IP 未修复的错误),是否保证传入的大小send()将是 in 的大小recv(),可能达到某个限制?如果是,可以确定这个限制吗?

4

2 回答 2

2

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

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

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

于 2012-12-11T10:30:38.190 回答
2

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

于 2012-12-11T10:30:48.737 回答