Boost.Asio iostream флеш не работает?

есть идеи, почему stream.flush(); не работает?

boost::asio::ip::tcp::iostream stream("localhost","5000");
assert(stream.good());  
stream << 1;
stream.flush();
while(true);

он сбрасывается только в том случае, если цикл удаляется и строка
boost::this_thread::sleep(boost::posix_time::seconds(1));
выполняется (намного позже).

Спасибо

Обновление: я сделал еще несколько отладок, и проблема на самом деле не в команде сброса. Если я разрешаю своему коду подключаться к серверу netcat, все работает нормально. Я предполагаю, что проблема в том, что и клиент, и сервер находятся в одном процессе (я создаю две угрозы, одна действует как сервер, а другая - как клиент). Когда я помещаю их в отдельные процессы, все работает нормально, но когда оба находятся в одном процессе, передача останавливается до тех пор, пока не будет вызван сон... (это только для целей тестирования, позже оба будут работать на разных серверах).

Платформа WindowsXP.

Есть идеи, почему это происходит?


person Community    schedule 27.08.2009    source источник


Ответы (1)


Откуда ты знаешь, что флеш не работает? Я подозреваю, что ваш while(true) очень сильно нагружает вашу систему. Это может помешать запуску получателя.

Попробуйте тот же код с получателем на другом хосте, чтобы проверить.

Обновление: я думаю, проблема в том, что пустое время (true); Я бы использовал что-то вроде:

while(true) {
    sleep(1);
}

или nanosleep оба определены в заголовке ctime. Наконец, да, я считаю, что запуск сервера и клиента в одном и том же процессе доставит вам больше проблем.

/Тобиас

person Tobias    schedule 27.08.2009