boost库之socket 非阻塞/缓冲区大小等属性设置

asio socket 非阻塞/缓冲区大小等属性设置
ip::tcp::socket m_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);
}
socket 端口复用
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();
2).还有一种方法 就是在acceptor的构造函数,下面是acceptor的构造函数,我们看到,第三个参数名reuse_addr 。默认是可以端口复用的,要设置是否复用,也可以通过该处传参。
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));
同步连接超时设置,没有对应的set_option参数,asio自带的例子里是用deadline_timer的async_wait方法来实现超时。
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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值