Ускорение чтения сокета ASIO на N байтов, не более и не менее, и ожидание их появления или исключения тайм-аута?

Создание простого TCP-сервера на основе примеров , но до сих пор не понимаю, как создать сокет, который читал бы некоторое количество байтов, и если их будет недостаточно буду ждать. Мне нужно, чтобы это НЕ было асинхронной операцией.

#include 
#include 

#ifdef _WIN32
#include "Windows.h"
#endif

using namespace boost::asio::ip;
using namespace std;

int main(){
    int m_nPort = 12345;
    boost::asio::io_service io_service;
    tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), m_nPort));

    cout << "Waiting for connection..." << endl;

    tcp::socket socket(io_service);
    acceptor.accept(socket);
    cout << "connection accepted" << endl;
    try
    {
        socket.send(boost::asio::buffer("Start sending me data\r\n"));
    }
    catch(exception &e)
    {
        cerr << e.what() << endl; //"The parameter is incorrect" exception
    }
}

Как получить 10000 байт и делать это либо до тех пор, пока не прибудут все 10000, ИЛИ тайм-аут 1000 миллисекунд и не сгенерирует исключение?

6
задан wallyk 13 July 2011 в 00:16
поделиться