设置socket缓冲器的大小以及Linux常用的I/O模型
来源:互联网 发布:淘宝网店拍摄照片 编辑:程序博客网 时间:2024/05/09 08:49
浅谈linux IO的模型http://www.360doc.com/content/13/0819/15/11818366_308288463.shtml
linux常用的I/O模型:http://www.360doc.com/content/13/0819/16/11818366_308308050.shtml
Linux I/O模型漫谈http://hi.baidu.com/galoisxin/item/1761410b29778990a3df43b8
socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,
缓冲区很快就被填满(socket默认的是1024×8=8192字节),
这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现。
如果要发送的消息的大小大于该socket默认的发送缓冲区的大小的剩余空间的时候,send函数一般会阻塞,除非socket被设置成非阻塞模式。
如果是非阻塞模式的话,且发送消息的长度大于发送缓冲区的大小的剩余空间的时候,send调用会但会EAGAIN错误代码。
下面是:
设置套接口的选项。
#include <sys/types.h>
#include <sys/socket.h>
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
sockfd:标识一个套接口的描述字。
level:选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
optname:需设置的选项。
optval:指针,指向存放选项待设置的新值的缓冲区。
optlen:optval缓冲区长度
eg:
int optVal = 1024*1024 ;
int optLen = sizeof(int);
setsockopt(socket, SOL_SOCKET,SO_RCVBUF,(char*)&optVal,optLen );
socket:传输数据的socket
SOL_SOCKET:基本套接口
SO_RCVBUF:接受数据的缓冲区
optVal: 缓冲区大小
optLen :指向缓冲区大小变量的长度
4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步);系统默认的状态发送和接收一次为8688字节(约
为8.5K);在实际的过程中如果发送或是接收的数据量比较大,可以设置socket缓冲区,避免send(),recv()不断的循环收发:
// 接收缓冲区
int nRecvBufLen = 32 * 1024; //设置为32K
setsockopt( s, SOL_SOCKET, SO_RCVBUF, ( const char* )&nRecvBufLen, sizeof( int ) );
//发送缓冲区
int nSendBufLen = 32*1024; //设置为32K
setsockopt( s, SOL_SOCKET, SO_SNDBUF, ( const char* )&nSendBufLen, sizeof( int ) );
5.在发送数据的时,不执行由系统缓冲区到socket缓冲区的拷贝,以提高程序的性能:
int nZero = 0;
setsockopt( socket, SOL_SOCKET, SO_SNDBUF, ( char * )&nZero, sizeof( nZero ) );
6.在接收数据时,不执行将socket缓冲区的内容拷贝到系统缓冲区:
int nZero = 0;
setsockopt( s, SOL_SOCKET, SO_RCVBUF, ( char * )&nZero, sizeof( int ) );
0 0
- 设置socket缓冲器的大小以及Linux常用的I/O模型
- linux-----------串口设置缓冲器的大小
- Windows Socket I/O模型 以及 Linux Epoll模型 的有关资料
- Windows Socket I/O模型 以及 Linux Epoll模型 的有关资料
- Windows Socket I/O模型以及Linux Epoll模型的有关资料
- Windows Socket I/O模型 以及 Linux Epoll模型 的有关资料
- linux下的常用I/O模型
- socket的I/O模型
- Java I/O的缓冲器细节
- Windows Socket I/O模型 以及 Linux Epoll模型
- LINUX的I/O模型
- Socket I/O 模型的性能参数
- socket相关的函数I/O模型
- Winodws Socket I/O模型的整理
- Windows支持的各种Socket 异步 I/O模型以及各自的特点
- socket的overlapped(重叠) I\O和其他socket I\O模型的区别
- Socket I/O模型 - 幽默 讲解Windows支持的6种 Socket I/O Model
- Linux下的I/O模型
- listview 行高设置
- Codeforces Round #288 (Div. 二) Anton and currency you all know
- AXIS WebServices开发
- 用GDB调试程序(二)
- php之支付宝登陆
- 设置socket缓冲器的大小以及Linux常用的I/O模型
- 文件系统中的逻辑块、物理块和扇区之间的关系
- 社説 20150210 衆参選挙制度 1票の格差是正が待ったなし
- LVS的NAT模式配置记要
- LVS NAT 配置步骤
- 用GDB调试程序(三)
- PYQT4 + Python2.7 + eric4-4.2.2a的安装全过程
- iOS 横屏与竖屏
- 社説 20150210 農協改革案 全中の受け入れは出発点だ