我想知道当传递给的大小send()
增加时,TCP/IP 连接会发生什么。
在一个简单的 TCP/IP 连接中(默认属性,没有 TCP/IP 未修复的错误),是否保证传入的大小send()
将是 in 的大小recv()
,可能达到某个限制?如果是,可以确定这个限制吗?
我想知道当传递给的大小send()
增加时,TCP/IP 连接会发生什么。
在一个简单的 TCP/IP 连接中(默认属性,没有 TCP/IP 未修复的错误),是否保证传入的大小send()
将是 in 的大小recv()
,可能达到某个限制?如果是,可以确定这个限制吗?
每个 send() 发送的数据大小可能与每个 recv() 不匹配,因为接收方不知道消息的大小。例如:一条 100 字节的消息可以分 10 个块发送,也可以一次发送 100 字节。
关于问题的第二部分,最大发送缓冲区大小可以通过一个简单的调用来确定:
int sockbufsize = 0; 大小 = sizeof(int); getsockopt(skt, SOL_SOCKET, SO_SNDBUF,(char *)&sockbufsize, &size); //skt 是套接字描述符
不,这不能保证。TCP 是一个流协议,它的套接字接口只保证字节流将以正确的顺序传输并且没有错误,仅此而已。当然,由于它保证了所有数据的正确发送,所以发送的总字节数将是接收到的总字节数。