如何设置socketsocket默认缓冲区大小小

留言簿(25)
全球最大的黑客门户网站
阅读排行榜
评论排行榜The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.socket设置发送、接收缓存区大小方法
//设置socket发送、接收缓冲区大小为64k,默认为8k,最大为64k
int value=65535;
int tmpCode=0;
tmpCode=::setsockopt(m_UdpSendSocket_Quot,
SOL_SOCKET, SO_RCVBUF, (char*)&value, sizeof(value));
tmpCode=::setsockopt(m_UdpSendSocket_Quot,
SOL_SOCKET, SO_SNDBUF, (char*)&value, sizeof(value));
int result=0;
int len=4;
tmpCode=::getsockopt((SOCKET)m_UdpSendSocket_Quot,SOL_SOCKET,
SO_RCVBUF, (char*)&result,
printf("SO_RCVBUF=%d,
tmpCode=%d\n", result,tmpCode);
tmpCode=::getsockopt((SOCKET)m_UdpSendSocket_Quot,SOL_SOCKET,
SO_SNDBUF, (char*)&result,
printf("SO_SNDBUF=%d,
tmpCode=%d\n", result,tmpCode);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。设置Socket缓冲区大小 - 推酷
设置Socket缓冲区大小
一般系统提供的socket缓冲区大小为8K,你可以将之设置为64K,这可以按照你的需求来定,其实有个标准的,我整理好了再发出来。以下代码是别人写的,我只是借花献佛 :)
Socket发送数据时候先把数据发送到Socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(Socket默认的是2字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数来实现
下面是C实现的修改Socket缓冲区大小代码
#include &stdio.h&
#include &stdlib.h&
#include &unistd.h&
#include &string.h&
#include &errno.h&
#include &sys/types.h&
#include &sys/socket.h&
#include &assert.h&
int main(int argc,char **argv)
int err = -1; /* 返回值 */
int s = -1; /* socket描述符 */
int snd_size = 0; /* 发送缓冲区大小 */
int rcv_size = 0; /* 接收缓冲区大小 */
socklen_ /* 选项值长度 */
* 建立一个TCP套接字
s = socket(PF_INET,SOCK_STREAM,0);
if( s == -1){
printf(&建立套接字错误\n&);
return -1;
* 先读取缓冲区设置的情况
* 获得原始发送缓冲区大小
optlen = sizeof(snd_size);
err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
if(err&0){
printf(&获取发送缓冲区大小错误\n&);
* 打印原始缓冲区设置情况
* 获得原始接收缓冲区大小
optlen = sizeof(rcv_size);
err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
if(err&0){
printf(&获取接收缓冲区大小错误\n&);
printf(& 发送缓冲区原始大小为: %d 字节\n&,snd_size);
printf(& 接收缓冲区原始大小为: %d 字节\n&,rcv_size);
* 设置发送缓冲区大小
snd_size = 10*1024; /* 发送缓冲区大小为8K */
optlen = sizeof(snd_size);
err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);
if(err&0){
printf(&设置发送缓冲区大小错误\n&);
* 设置接收缓冲区大小
rcv_size = 10*1024; /* 接收缓冲区大小为8K */
optlen = sizeof(rcv_size);
err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);
if(err&0){
printf(&设置接收缓冲区大小错误\n&);
* 检查上述缓冲区设置的情况
* 获得修改后发送缓冲区大小
optlen = sizeof(snd_size);
err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
if(err&0){
printf(&获取发送缓冲区大小错误\n&);
* 获得修改后接收缓冲区大小
optlen = sizeof(rcv_size);
err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen);
if(err&0){
printf(&获取接收缓冲区大小错误\n&);
* 打印结果
printf(& 发送缓冲区大小为: %d 字节\n&,snd_size);
printf(& 接收缓冲区大小为: %d 字节\n&,rcv_size);
原始缓冲区大小是多少,这个是由系统内核算法决定的
大家在你自己的环境下编译运行下,看看有没有修改成功!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致socket.receive中,如果服务器总大小小于缓冲区的大小会引发异常吗-.NET技术/C#-c/c++-电脑编程网socket.receive中,如果服务器总大小小于缓冲区的大小会引发异常吗-.NET技术/C#作者:xiaoa_m 和相关&&就是socket.receive(buffer,size,0)如果总共的数据大小小于size会不会引发异常呢?谢谢了。------回答---------------其他回答(20分)---------不会有异常,只是缓冲区没装满而已,读的时候读实际接收到的字节数,而不是缓冲区的大小就可以了
------回答---------------其他回答(20分)---------
不会有异常,只是缓冲区没装满而已,读的时候读实际接收到的字节数,而不是缓冲区的大小就可以了
相关资料:|||||||socket.receive中,如果服务器总大小小于缓冲区的大小会引发异常吗-.NET技术/C#来源网络,如有侵权请告知,即处理!编程Tags:                &                    

我要回帖

更多关于 socket默认缓冲区大小 的文章

 

随机推荐