设置SO_RECVBUF和SO_SENDBUF套接字选项
2018-06-17 22:30:19来源:未知 阅读 ()
控制套接字的行为(如修改缓冲区的大小)。
int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen);
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen);
level指定控制套接字的层次.可以取三种值:
-
SOL_SOCKET:通用套接字选项.
-
IPPROTO_IP:IP选项.
-
IPPROTO_TCP:TCP选项.
optname指定控制的方式(选项的名称)
optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换
返回值说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字
数据结构说明:
1)结构:linger,它的声明如下:
struct linger{ int l_onoff; //状态 int l_linger; //等待时间 };
2)结构:timeval,它的声明如下:
struct timeval{ time_t tv_sec; //秒 suseconds_t tv_usec; //微秒:百万分之一秒 };
举例说明:
SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。
// 接收缓冲区 int nRecvBuf=32*1024; //设置为32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); //发送缓冲区 int nSendBuf=32*1024;//设置为32K setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
注意:
当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 对象的初始化和赋值 2020-06-03
- C++临时变量的回顾思考以及librdkafka设置回调函数注意点 2019-09-17
- 关于引用参数设置默认值的问题 2019-08-16
- VS2015中不同开发环境设置转换(C#->C++等) 2018-11-28
- DLL加载,设置相对路径 2018-08-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash