2015-06-06 47 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)