Я пытаюсь создать нечто похожее на этот код , найденный в примерах boost.asio.
socket.h:
class some_class {
private:
...
boost::asio::io_service io_service;
public:
some_class() {
/* This stuff isn't used in the example...
...but it doesn't change anything... */
io_service.run();
}
};
socket.cpp:
using boost::asio::ip::tcp;
bool some_class::connect(char* host, char* port)
{
printf("Resolving hostname...\n");
/* Resolve hostname. */
tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), host, port);
tcp::resolver::iterator iterator = resolver.resolve(query);
printf("Connecting to %s:%s... ", host, port);
/* Connect to resolved hosts. */
sock->connect(*iterator);
return true;
}
g ++ создает это без каких-либо ошибок, но код никогда не проходит после вызова resolver.resolve ().
Я пробовал "127.0.0.1" и "localhost" для хоста и "80" для порта. (не думаю, что это должно иметь значение, но apache2 запущен и работает)
Когда я нажимаю ctrl + c из своего приложения, оно, очевидно, завершается, но выводит «Соединение со строкой» как раз перед тем, как это происходит.
Я планирую сам создать пример и посмотреть, возникнет ли та же проблема, и обязательно опубликую результаты здесь. Кто-нибудь сталкивался с этой проблемой или знает, что может вызвать такое поведение?
редактирование:
Пример работает просто отлично ... Полагаю, мне нужно отладить.
второе редактирование:
Я не понимаю, единственное, что может отличаться, это хост / порт.
Пример использует char * argv [] и я использую:
char host[] = "localhost";
char port[] = "80";
третье редактирование:
он действительно блокирует соединение, забыл fflush (stdout). тогда это должно быть проблема с сокетом. собираюсь сделать еще тестирование.
четвертое редактирование:
глупый я, это не блокировало вообще! Я просто слишком полагался на вывод консоли ..