socket.recv的buf的size和socket的setsockopt中的SO_RCVBUF的关系

C++语言 码拜 8年前 (2017-04-22) 2294次浏览
问一下高手,最近一直调试socket的buffer大小设置
发现这两个buffer不知道什么关系
socket.recv(fd, buf, size, flag)中buf的size

setsockopt(fd, SOL_SOCKET, SO_RCVBUF, value, valuesize)的value
这两个有什么关系
是不是
setsockopt的size指的是tcp协议中的协议接收数据的缓冲大小
recv的size指从缓冲区拷贝到用户buffer的大小?
那么通常这两个值应该设置多大呢?
recv的buffer的size本人设置了4K
setsockopt的buffer的size本人设置了16M,对,就是16兆
这样会有什么问题呢?谢谢各位了
解决方案

40

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

socket.recv(fd, buf, size, flag)中buf的size###这个是你本人的缓冲区

setsockopt(fd, SOL_SOCKET, SO_RCVBUF, value, valuesize)的value#####这个是系统的缓冲区

这两个大小本人设置多少合适呢
本人现在是在消息系统中测试的
测试的客户端一直发消息,服务端接受处理
recv的设置4K,setsockopt的设置16M 合适吗?

不算合适,一般情况下可以不用修改系统的SO_RECVBUF,除非你发超大的udp包,且让系统分片;
假如是tcp的,本人的buf可以根据业务的实际情况来设置,假如你发送和接收的包比较大,或想一次尽可能多的让socket帮你收发数据,就把本人的buf 设置大一些,这样在发送的时候,可以把多个小的消息放在buf中,只进行一次系统调用就发送出去了。

本人现在就是不知道设置多少。
本人还有两个问题
第一就是本人怎么才能测试出来 本人的服务端 最大处理能力呢?
例如,仅仅是例子, 有100个客户端,recv设置4K和200个客户端recv设置8k,当本人压力测试时,recv要设置多少呢?
本人现在的问题是服务端处理的速度没有接收的快,压力测试时很容易服务端就接收了一大堆数据
//假如处理慢于接收,则说明你处理数据那块存在性能
第二就是当setsockopt的buffer被填充满时,再有数据发送过来时,会出现什么情况?//会出现tcp链路被堵住…………
系统是将数据丢掉还是其他处理?谢谢了

见回复


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明socket.recv的buf的size和socket的setsockopt中的SO_RCVBUF的关系
喜欢 (0)
[1034331897@qq.com]
分享 (0)