Boost.Asio iostream flush не работает? - PullRequest
1 голос
/ 27 августа 2009

есть идеи, почему 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.

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

1 Ответ

0 голосов
/ 27 августа 2009

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

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

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

while(true) {
    sleep(1);
}

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

/ Tobias

...