感觉很奇怪,经常在网上看别人说send函数是将用户数据拷贝到协议缓存中了,默认协议缓存是8192B,如果send函数里面的长度大于这个协议缓存那么就返回错误,但我发了一个70000B的数据,居然返回的是70000,并不是返回-1,所以很奇怪,而且更奇怪的是我定义了一个缓存szSendBuf[1024],然后应用这一句rt=send(sock,szSendBuf,70000,0),居然rt也是返回的70000,不仅没有返回-1(因为其大小超过了8192),而且直接无视了szSendBuf真正的大小只有1024,求原因!!!,感觉自己对send函数,recv函数的特性一点都不了解,网上有很多人各种说法,我一个都不敢相信了。求大侠解惑。sendsocketwinsock网络编程
---- 你在对端的recv处断点,停住试试看2. rt=send(sock,szSendBuf,70000,0)时,直接无视了szSendBuf真正的大小只有1024
---- 第三个参数代表的就是传输的大小(字节个数),
---- 就像定义个数组int arr[10]; 你却这么写: arr[10] = 1;
---- C/C++不会校验数组是否越界访问 (但访问到不能访问的数据,可能就会直接crash)
---- 总之,不是send的处理错误,而是你自己传参错误
参考这里http://www.360doc.com/content/13/0913/15/13047933_314202256.shtml
这种情况下,系统会保证数据被发往对端。确认这个就够用了
参考这里http://www.360doc.com/content/13/0913/15/13047933_314202256.shtml感谢你给我这个链接,这个人测了半天实际上是撤出了mtu最大是1500,mss在linux下是1448在window下是1460这一个事实,更本不是测的发送的数据超过发送缓冲区会怎么样,我简直想笑,我相信他把发送缓冲区设置为默认8192然后发3000个数据,这是发送的数据并没有超过发送缓冲,tcp包照样是分成3次发送,一次只能发送1460个字节,我兼职都不晓得这个人测的东西居然都不是自己想要测试的目的就盲目的测,无语。