boost :: asio :: ip :: tcp :: acceptor如何与TCP_DEFER_ACCEPT和TCP_FASTOPEN一起使用

时间:2017-06-01 09:30:17

标签: c++ boost tcp boost-asio

boost :: asio :: ip :: tcp :: acceptor如何使用TCP_DEFER_ACCEPT和TCP_FASTOPEN,

当我使用纯C时,我可以设置一些像TCP_DEFER_ACCEPT和TCP_FASTOPEN这样的参数,以提高tcp / ip性能,如下所示: setsockopt(serverSock,IPPROTO_TCP,TCP_DEFER_ACCEPT,& soValue,sizeof(soValue)); setsockopt(serverSock,SOL_TCP,TCP_FASTOPEN,& qlen,sizeof(qlen));  但是当我使用boost :: asio时,我找不到任何设置TCP_DEFER_ACCEPT和TCP_FASTOPEN的方法,谁能告诉我如何解决它?谢谢。

1 个答案:

答案 0 :(得分:0)

我明白了。使用boost :: asio :: ip :: tcp :: acceptor :: native_handle()。

示例:

std::shared_ptr<boost::asio::ip::tcp::acceptor>   sp_acceptor( std::make_shared<boost::asio::ip::tcp::acceptor>( d_ios_last0 ) );
sp_acceptor->open( server_endpoint.protocol() );
sp_acceptor->set_option( boost::asio::ip::tcp::acceptor::reuse_address( true  ) );
if( bool_tcp_defer_accept )  {
  int soValue = 1;
  if( 0 == setsockopt( sp_acceptor->native_handle(), IPPROTO_TCP, TCP_DEFER_ACCEPT, &soValue, sizeof(soValue)) )  {
    log_message( "TCP_DEFER_ACCEPT set success." );
    }
  else  {
    warn_message( "TCP_DEFER_ACCEPT set failed." );
    }
  }
sp_acceptor->bind( server_endpoint );
if( bool_tcp_fastopen )  {
  int qlen=5;
  if( 0==setsockopt( sp_acceptor->native_handle(), SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen)) ) {
    log_message( "TCP_FASTOPEN set success." );
    }
  else  {
    warn_message( "TCP_FASTOPEN set failed." );
    }
  }
sp_acceptor->listen( 8192 );