boost库之socket 非阻塞/缓冲区大小等属性设置
boost库之socket 非阻塞/缓冲区大小等属性设置
//设置阻塞与非阻塞
void SetNoBlock(bool bNoBlock)
{
if(bNoBlock)
{
boost::asio::ip::tcp::socket::non_blocking_io io_option(true);
m_socket.io_control(io_option);
}
else
{
//阻塞
boost::asio::ip::tcp::socket::non_blocking_io io_option(false);
m_socket.io_control(io_option);
}
}
void SetSendBufferSize(int nSize)
{
boost::asio::socket_base::send_buffer_size size_option(nSize);
m_socket.set_option(size_option);
}
void SetRecvBufferSize(int nSize)
{
boost::asio::socket_base::receive_buffer_size size_option(nSize);
m_socket.set_option(size_option);
}
1).在boost的acceptor类说明中有这样的一个例子。用set_option设置端口是否可复用。
boost::asio::ip::tcp::acceptor acceptor(io_service);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
acceptor.open(endpoint.protocol());
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
acceptor.bind(endpoint);
acceptor.listen();
basic_socket_acceptor(boost::asio::io_service& io_service,const endpoint_type& endpoint, bool reuse_addr = true)
m_socket.set_option(boost::asio::ip::tcp::no_delay(true));
//保持常连接
m_socket.set_option(boost::asio::socket_base::keep_alive(true));
1).deadline_timer的async_wait方法
参考:http://blog.csdn.net/li_jian_xing/article/details/50394116
2).传统的Winsock编程可以先把socket设为非阻塞,然后connect,通过boost::asio::ip::tcp::socket类的native函数获取到原始sokcet,再用select来判断超时,asio也可以这样做,唯一“非主流”的是asio里没有一个类似select的函数,所以得调用原始的Winsock API,也就牺牲了跨平台。
参考:http://blog.csdn.net/lazy_cc/article/details/7941069
boost库之socket 非阻塞/缓冲区大小等属性设置
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/byxdaz/article/details/77318219
//设置阻塞与非阻塞
void SetNoBlock(bool bNoBlock)
{
if(bNoBlock)
{
boost::asio::ip::tcp::socket::non_blocking_io io_option(true);
m_socket.io_control(io_option);
}
else
{
//阻塞
boost::asio::ip::tcp::socket::non_blocking_io io_option(false);
m_socket.io_control(io_option);
}
}
void SetSendBufferSize(int nSize)
{
boost::asio::socket_base::send_buffer_size size_option(nSize);
m_socket.set_option(size_option);
}
void SetRecvBufferSize(int nSize)
{
boost::asio::socket_base::receive_buffer_size size_option(nSize);
m_socket.set_option(size_option);
}
1).在boost的acceptor类说明中有这样的一个例子。用set_option设置端口是否可复用。
boost::asio::ip::tcp::acceptor acceptor(io_service);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
acceptor.open(endpoint.protocol());
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
acceptor.bind(endpoint);
acceptor.listen();
basic_socket_acceptor(boost::asio::io_service& io_service,const endpoint_type& endpoint, bool reuse_addr = true)
m_socket.set_option(boost::asio::ip::tcp::no_delay(true));
//保持常连接
m_socket.set_option(boost::asio::socket_base::keep_alive(true));
1).deadline_timer的async_wait方法
参考:http://blog.csdn.net/li_jian_xing/article/details/50394116
2).传统的Winsock编程可以先把socket设为非阻塞,然后connect,通过boost::asio::ip::tcp::socket类的native函数获取到原始sokcet,再用select来判断超时,asio也可以这样做,唯一“非主流”的是asio里没有一个类似select的函数,所以得调用原始的Winsock API,也就牺牲了跨平台。
参考:http://blog.csdn.net/lazy_cc/article/details/7941069
boost库之socket 非阻塞/缓冲区大小等属性设置相关推荐
- php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说. 在socket编程中,如果一个socket连接上了, ...
- C# socket通信 接收缓冲区大小设置,以及粘包问题的解决
C# socket通信 接收缓冲区大小,以及粘包问题的解决 一. Socket接收缓冲区无论: 1.buffer设置有多大: 2.同步接收还是异步接收: 3.发送超过 43690 也就是 42KB的字 ...
- 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
文章目录 I 设置读取超时时间 II Socket 复用绑定端口设置 III 开启 Nagle 算法 ( 沾包 ) IV 心跳包机制 V 连接关闭处理 VI Socket 紧急数据内敛设置 VII S ...
- epoll关于ET、LT模式和socket非阻塞模式的几个总结
epoll的ET和LT模式 LT水平触发是默认的模式,只要缓冲区有消息就会触发,如果这次事件没有被处理,那么下一次调用epoll_wait的时候,事件仍然会被触发:ET边沿触发只会在第一次有消息的时候 ...
- Java nio Socket非阻塞模式
NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有 事件发生时,他会通知我们,传回一组Select ...
- java 阻塞 socket_java socket非阻塞I/O
1 非阻塞(Nonblocking)体系结构 在这一部分,我将从理论的角度来解释非阻塞体系的结构及其工作原理.这部"喜剧"(当然,如果你喜欢的话也可以称做戏剧)的&quo ...
- C++ TCP socket 非阻塞连接超时设定方式
由于网上大部分教程为阻塞方式连接,当项目需要大量连接从机的情况下,阻塞式连接socket会导致长时间卡顿.因此需要用非阻塞式的方式连接,并设置超时是时间,再设置会阻塞.下属C++编辑代码实测可用,代码 ...
- Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误
今天再测试socket的时候,发现一个很奇怪的问题,就是客户端再connect的时候第一次connect总是会返回-1,errno是115,往往第二次连接就可以成功了.但是对于服务端来说,第一次连接已 ...
- linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞
转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL 设置给arg描述符 ...
最新文章
- 我的第一份工作是个小公司
- jquery的deferred对象
- Reactive Extensions入门(5):ReactiveUI MVVM框架
- android remoteviews 设置背景,Android通过RemoteViews实现跨进程更新UI示例
- 一步一步SharePoint 2007之二十五:编写一个最简单的WebPart(3)——添加WebPart
- 2021年程序员1月薪资大幅度上涨,你的2021有奔头了吗?
- php html转换数组,将html标签转换为php数组
- Golang实践录:调用C++函数的优化
- sql server计算机用户权限,SQL Server新增用户并控制访问权限设置。
- 《推荐系统笔记(十二)》聚类生成标签以及基于标签的TopN推荐
- paip.提升用户体验---文件查找
- allegro 导 bom
- 什么是flex布局,它的常用属性有哪些
- 玻色量子与华夏、人行、龙盈智达联合发表量子金融研究成果
- 我裸辞全职接单第一个月的收入
- windows adb usb 找不到设备的解决方法
- Smokeping安装教程
- 【Linux命令】挂盘相关命令,包含可扩展硬盘
- 学生如何免费激活JetBrain所有产品(PyCharm,IDEA......)
- 读书笔记 -- 《瓦尔登湖》
热门文章
- oracle数据库查询表语句,oracle数据库重要的查询语句
- Placement new的用法及用途
- mysql构建镜像时写入密码_用Dockerfile手动创建mysql5.7主从镜像
- 15g1和g2和g3区别大吗_河南成人高考和普通高考的区别有哪些?成人高考难度会越来越大吗?...
- chrome 禁用恢复页面提示_有哪些很值得推荐的Chrome插件?精选7款实用插件
- 聚合函数的计算机控件,使用Kendo UI MVC Grid包装器的聚合函数
- mysql多数据源切换_Springboot项目实现Mysql多数据源切换的完整实例
- Spring官宣网传大漏洞,附解决方案!网传方案有隐患,建议加固!
- 分布式 WebSocket 集群解决方案
- 在Spring Boot中实现通用Auth认证的几种方式