2015-06-06 12 views
2

我试图使用同样的问题的答案,禁用Nagle算法No_delay选项:ASIO ip::tcp::iostream and TCP_NODELAY的iostream和

boost::asio::ip::tcp::iostream socketStream; 
    const boost::asio::ip::tcp::no_delay option(true); 
    socketStream.rdbuf()->set_option(option); 
    boost::asio::io_service io_service; 
    tcp::endpoint endpoint (tcp::v4(), 6666); 
    tcp::acceptor acceptor (io_service, endpoint); 

    std::cout << "Waiting for connection.." << std::endl; 
    acceptor.accept (*socketStream.rdbuf()); 
    std::cout << "Connected!" << std::endl; 

和运行代码时出现此错误:

set_option: Bad file descriptor 

哪有我解决了这个问题?

回答

1

如果设置了该选项,则流仍然无效(未打开)。

等待,直到插座是开放的,设置选项前:

Live On Coliru

#include <boost/asio.hpp> 
#include <iostream> 

static boost::asio::ip::tcp::no_delay const no_delay_option (true); 

int main() { 
    using boost::asio::ip::tcp; 

    tcp::iostream socketStream; 


    boost::asio::io_service io_service; 

    tcp::endpoint endpoint (tcp::v4(), 6666); 
    tcp::acceptor acceptor (io_service, endpoint); 

    std::cout << "Waiting for connection.." << std::endl; 
    acceptor.accept (*socketStream.rdbuf()); 
    socketStream.rdbuf()->set_option(no_delay_option); 

    std::cout << "Connected!" << std::endl; 
    std::cout << socketStream.rdbuf() << "\n"; 
} 

(我们使用netcat的有送main.cpp端口6666)