c++ - boost::asio::ip::tcp::acceptor 如何与 TCP_DEFER_ACCEPT 和 TCP_FASTOPEN 一起工作

标签 c++ boost tcp boost-asio

boost::asio::ip::tcp::acceptor 如何与 TCP_DEFER_ACCEPT 和 TCP_FASTOPEN 一起工作,

当我使用纯 C 时,我可以设置一些参数,如 TCP_DEFER_ACCEPT 和 TCP_FASTOPEN,以 boost 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,谁能告诉我如何解决?谢谢。

最佳答案

我明白了。使用 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 );

关于c++ - boost::asio::ip::tcp::acceptor 如何与 TCP_DEFER_ACCEPT 和 TCP_FASTOPEN 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303738/

相关文章:

c++ - 我可以将参数传递给 SIGINT 吗?

c++ - 使用非类型模板参数重复调用函数

c++ - 在 C++ 中使用 boost 拆分字符串两次?

c++ - 如何在 boost 1.57 中安装 boost 模块(应用程序和 dll)

tcp 连接超时(unix/windows 便携)

c++ - 为 QLabel 设置输入掩码?

c++ - 为什么 C++ 在将 float 转换为 char 时不显示缩小转换错误?

c++ boost将char数组反序列化为obj

android - 监听器中的PrintWriter使应用程序崩溃

windows - 如何理解 tcp windows server 连接问题?