当前位置: 技术问答>linux和unix
求助,询问:socket 设定网络缓冲区的问题(SO_SNDBUF)
来源: 互联网 发布时间:2016-10-11
本文导语: Hi,All 小弟是Linux 网络编程的菜鸟,请教一个socket 发送缓冲区的问题如下: socket 发送缓冲区设定我在网上查找资料是这样设定的: int nSendBuf = 128*1024; //设置为128K setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF,...
Hi,All
小弟是Linux 网络编程的菜鸟,请教一个socket 发送缓冲区的问题如下:
socket 发送缓冲区设定我在网上查找资料是这样设定的:
int nSendBuf = 128*1024; //设置为128K
setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, ( const char* )&nSendBuf, sizeof( int ) );
请教:
1.这个是设定总的缓冲区还是单独的每一个的socket 缓冲区?这个值是给正在listen 的server socket 设定还是要给连接的每一个socket fd 设定呢?
2.如果按照每一个socket fd 都要设定,那每一个分给128K,假如有10000个用户同时在线,岂不是内存要分出去128000K = 1250M相当于1GB 多的内存给socket 用?这样的理解是否正确?
3.我在网上查找的资料,有时候数据量大,是可以写程序动态分配更多的缓冲区给socket 用。是否可以提供点linux C 的源代码来参考一下。
感谢
小弟是Linux 网络编程的菜鸟,请教一个socket 发送缓冲区的问题如下:
socket 发送缓冲区设定我在网上查找资料是这样设定的:
int nSendBuf = 128*1024; //设置为128K
setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, ( const char* )&nSendBuf, sizeof( int ) );
请教:
1.这个是设定总的缓冲区还是单独的每一个的socket 缓冲区?这个值是给正在listen 的server socket 设定还是要给连接的每一个socket fd 设定呢?
2.如果按照每一个socket fd 都要设定,那每一个分给128K,假如有10000个用户同时在线,岂不是内存要分出去128000K = 1250M相当于1GB 多的内存给socket 用?这样的理解是否正确?
3.我在网上查找的资料,有时候数据量大,是可以写程序动态分配更多的缓冲区给socket 用。是否可以提供点linux C 的源代码来参考一下。
感谢
|
对于服务端来说,设置listen fd的缓冲区大小就可以了,会被后续建立的连接继承
|
我觉得LZ描述的不够清楚。请问前台是什么,是指那100个客户端吗?
如果要向大量的客户发送相同的信息,你可以考虑用udp吗?可以使用组播吗?
TCP的服务端是每个socket拥有自己的SNDBUF,这里的socket是指accept()返回的那个,其SNDBUF大小从listen_socket继承而来,各自独立。总的BUF大小,好像是不能设定的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。