Помогите разобраться с boost::asio
От: Gusher  
Дата: 04.03.08 09:04
Оценка:
Скомпилировал примеры синхронного сервера и клиента.
клиент
сервер

Телнетом захожу на сервер, все ок.
Однако этот код из примера клиента завершает выполнение.
while (error && endpoint_iterator != end)
 {      
      socket.close();
      socket.connect(* endpoint_iterator++, error);
 }
if (error)
{          
      throw boost::system::system_error(error);
}

выдает ошибку "Не удается найти указанный файл" error_code.value() == 2.
Это притом что сокет на самом деле открывается и коннектиться. Я получаю время если продолжаю выполнение программы. В чем проблема?
ПС: OS Windows


06.03.08 13:51: Перенесено модератором из 'C/C++' — Кодт
Re: Помогите разобраться с boost::asio
От: Vinick Россия  
Дата: 04.03.08 11:19
Оценка:
Здравствуйте, Gusher, Вы писали:
G>Однако этот код из примера клиента завершает выполнение.
G> выдает ошибку "Не удается найти указанный файл" error_code.value() == 2.
G>ПС: OS Windows

Т.е при выходе из цикла у тебя выбрасывается исключение?
Странно, под Linux работает нормально. А под виндами нет возможности проверить.
Попробуй переписать этот кусок так чтобы error не инициализировалась при создании, а первый вызов connect вынести за
пределы цикла.
    tcp::socket socket(io_service);
    boost::system::error_code error;
    socket.connect(*endpoint_iterator++, error);
    while (error && endpoint_iterator != end)
    {
      socket.close();
      socket.connect(*endpoint_iterator++, error);
    }
    if (error)
      throw boost::system::system_error(error);
Re: Помогите разобраться с boost::asio
От: remark Россия http://www.1024cores.net/
Дата: 04.03.08 15:36
Оценка:
Здравствуйте, Gusher, Вы писали:

Может быть имелось в виду:

G>
G>while (!error && endpoint_iterator != end)
G> {      
G>      socket.close();
G>      socket.connect(* endpoint_iterator++, error);
G> }
G>}





1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Помогите разобраться с boost::asio
От: Vinick Россия  
Дата: 04.03.08 17:31
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Gusher, Вы писали:


R>Может быть имелось в виду:


G>>
G>>while (!error && endpoint_iterator != end)
G>> {      
G>>      socket.close();
G>>      socket.connect(* endpoint_iterator++, error);
G>> }
G>>}

Нет,никаких отрицаний, просто автор в первом посте привел не полный код. В реальности это выглядит так
   asio::error_code error = asio::error::host_not_found;
    while (error && endpoint_iterator != end)
    {
      socket.close();
      socket.connect(*endpoint_iterator++, error);
    }
    if (error)
      throw asio::system_error(error);

Единственное, что можно предположить — socket.connect в случае успеха не меняет переменную error. Но разобраться в коде asio мне не по зубам.
Re[3]: Помогите разобраться с boost::asio
От: Gusher  
Дата: 05.03.08 03:49
Оценка:
Спасибо за ответы.
Смог поправить, только не понял как
Кажется asio даже ipv4 передает как ipv6. по крайней мере размер в ::connect 16 байт, поставил протокол ipv6. Но эффекта сразу это не дало. Повыключал сервисы, антивирус и т.д. Потом вдруг заработало
Кажется все-таки помогла установка ipv6, только применилось изменение не сразу.
Re[4]: Помогите разобраться с boost::asio
От: g_i  
Дата: 05.03.08 21:35
Оценка:
Здравствуйте, Gusher, Вы писали:

G>Спасибо за ответы.

G>Смог поправить, только не понял как
G>Кажется asio даже ipv4 передает как ipv6. по крайней мере размер в ::connect 16 байт, поставил протокол ipv6. Но эффекта сразу это не дало. Повыключал сервисы, антивирус и т.д. Потом вдруг заработало
G>Кажется все-таки помогла установка ipv6, только применилось изменение не сразу.
Ну-ну. Как заработало, так и перестанет.
Re[3]: Помогите разобраться с boost::asio
От: remark Россия http://www.1024cores.net/
Дата: 10.03.08 03:08
Оценка:
Здравствуйте, Vinick, Вы писали:

V>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, Gusher, Вы писали:


R>>Может быть имелось в виду:


G>>>
G>>>while (!error && endpoint_iterator != end)
G>>> {      
G>>>      socket.close();
G>>>      socket.connect(* endpoint_iterator++, error);
G>>> }
G>>>}


V>Нет,никаких отрицаний, просто автор в первом посте привел не полный код. В реальности это выглядит так



Я имею в виду, что по логике вроде как должно быть "выполнять, пока нет ошибки и остались ендпоинты", а не "выполнять, пока ошибка и остались ендпоинты".



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Помогите разобраться с boost::asio
От: Аноним  
Дата: 11.03.08 19:37
Оценка:
Здравствуйте, Gusher, Вы писали:

G>Скомпилировал примеры синхронного сервера и клиента.

G>[url=http://asio.sourceforge.net/boost_asio_0_3_9/libs/asio/doc/html/boost_asio/tutorial/tutdaytime1.html
G>]клиент[/url]
G>[url=http://asio.sourceforge.net/boost_asio_0_3_9/libs/asio/doc/html/boost_asio/tutorial/tutdaytime2.html
G>]сервер[/url]

G>Телнетом захожу на сервер, все ок.

G>Однако этот код из примера клиента завершает выполнение.
G>
G>while (error && endpoint_iterator != end)
G> {      
G>      socket.close();
G>      socket.connect(* endpoint_iterator++, error);
G> }
G>if (error)
G>{          
G>      throw boost::system::system_error(error);
G>}

G> выдает ошибку "Не удается найти указанный файл" error_code.value() == 2.
G>Это притом что сокет на самом деле открывается и коннектиться. Я получаю время если продолжаю выполнение программы. В чем проблема?
G>ПС: OS Windows

Я думаю ошибка не в это месте. Судя по ошибке сокет уже закрыли с другой стороны.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.