永发信息网

socket的read和recv函数的区别

答案:1  悬赏:80  手机版
解决时间 2021-12-03 04:27
socket的read和recv函数的区别
最佳答案
read 原则:
数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待。所以一般情况下:我们读取数据都需要采用循环读的方式读取数据,因为一次read 完毕不能保证读到我们需要长度的数据,read 完一次需要判断读到的数据长度再决定是否还需要再次读取。
recv 原则:
recv 中有一个MSG_WAITALL 的参数:
recv(sockfd, buff, buff_size, MSG_WAITALL),
正常情况下recv 是会等待直到读取到buff_size 长度的数据,但是这里的WAITALL 也只是尽量读全,在有中断的情况下recv 还是可能会被打断,造成没有读完指定的buff_size的长度。所以即使是采用recv + WAITALL 参数还是要考虑是否需要循环读取的问题,在实验中对于多数情况下recv (使用了MSG_WAITALL)还是可以读完buff_size,
所以相应的性能会比直接read 进行循环读要好一些。
1)尽量使用recv(,,MSG_WAITALL),read必须配合while使用,否则数据量大(240*384)时数据读不完
2)编程时写入的数据必须尽快读出,否则后面的数据将无法继续写入
3)最佳搭配如下:
nbytes = recv(sockfd, buff, buff_size,MSG_WAITALL);
nbytes = send(scokfd, buff, buff_size,MSG_WAITALL);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
某人有5把钥匙,一把房门钥匙,但是忘记是哪
我想知道的是,壁挂炉怎么做热水?
机战王中有哪些角色啊?
女人私部为什么会变黑
加盟速8酒店一般多少间房比较合适?
求这张天天动听背景图 求原图 谢谢
在建的房子,为什么每个楼层同一个地方会有一
单选题与洋葱细胞相比,人的口腔上皮细胞没有
风在哄,马在叫....是那首诗里的
redis 集群会自动寻找redis实例吗
电缆外径70mm应该穿墙要开多大的孔
索尼微单有个小手的标示是什么
瓦楞纸箱戳穿强度怎么检测
胡中花的丈夫
65-48=17和65-54=11有什么不同的地方
推荐资讯
有没有类似于超能右手的小说
日本出来的时候 那时候是中国的哪个朝代
手掌印的歌词
要一个带"懒"的个性签名
玩英雄联盟没卡最便宜的电脑配置
水费突然增加怎么办?
南充市商业银行(营渠路)地址在什么地方,我要
一个梯形,上底是15厘米,下底是25厘米,面积
22乘13厘米是美国多少英寸
南方的湿度真有那么高吗
内蒙和山西交界处有哪些市县?
股东除了掏钱,还能干嘛?投资后有收入嘛?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?