recv返回问题
时间:2011-12-08
来源:互联网
用非阻塞模式时,用recv返回。。我想测试下缓冲区有多大。。
就设置了buf<8k,>8k的几种情况,可是recv返回值都是我设置的buf的大小,
不是说recv返回的是缓冲区拷贝到buf中的大小嘛??那么最多也只可能返回缓冲区的大小8k?16k?
可是结果不管我怎么测试都是buf的大小。。。之前在同一台电脑上测,百度出可能是因为127.0.0.01,数据没有经过缓冲区。。现在环境:服务器在虚拟机上,虚拟机网络连接采用的是桥接。。buf也有memset了
结果还是一样。。故请教各位recv中的buf跟缓冲区的关系
作者: ocean0606 发布时间: 2011-12-08
作者: maoxing63570 发布时间: 2011-12-08
系统缓冲区是默认设置的 一般就是8K还是16K buf是你要接收的缓冲区 数据由网卡接收 然后放入系统的缓冲区 操作系统再从系统缓冲区里把数据 拷贝到你的buf
作者: yaozhiyong110 发布时间: 2011-12-08
貌似是有数据到来的时候由网卡接到下来保存到缓冲区中,运用程序调用recv或者是WSARecv从网卡的缓冲区中拷贝到你在程序中设置的那个缓冲中(这里通常是一个字符数组)
作者: ocean0606 发布时间: 2011-12-08
非阻塞一般都是返回0 等数据来了由OVER结构或者完成端口通知
系统缓冲区是默认设置的 一般就是8K还是16K buf是你要接收的缓冲区 数据由网卡接收 然后放入系统的缓冲区 操作系统再从系统缓冲区里把数据 拷贝到你的buf
作者: ocean0606 发布时间: 2011-12-08
你的recv是非阻塞的? 自己给自己机子发?
作者: yaozhiyong110 发布时间: 2011-12-08
来了多少就返回多少。。如果我用阻塞模式在发送端发送一个100mb的数据。。那我接收端buf也设置成100mb那能一次接受完嘛??还是说一次返回缓冲区中的数据。。也就是8k,或16k??
非阻塞的是马上返回 阻塞的是有数据来了就返回 来了多少就返回多少 只要不超出你要接收的量
你的recv是非阻塞的? 自己给自己机子发?
作者: ocean0606 发布时间: 2011-12-08
接收同理...
PS: TCP是流模式的 就是说 数据是连续的 你一次没接收完 数据还在那里 所以不用担心 一次没有把
所有的来的数据接收完导致丢失 不过要考虑 发送太快 导致接收的系统缓冲区溢出 那么数据就丢了
即使这样 发送方也是能根据返回值 知道某些数据接收方的网卡没有接收...
作者: yaozhiyong110 发布时间: 2011-12-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28