문제

나는 비슷한 것을 만들려고 노력하고 있습니다 이 코드 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 ++는 오류없이이를 구축하지만 코드는 리졸버.resolve () 호출을 지나치지 않습니다.
호스트의 경우 "127.0.0.1"과 "LocalHost", 포트의 경우 "80"을 모두 시도했습니다. (중요하다고 생각하지 않지만 Apache2가 시작되고 실행 중입니다)

응용 프로그램에서 Ctrl+C를 CTRL+C로 만들면 분명히 종료되지만 바로 직전에 "문자열에 연결"을 출력합니다.

나는 예제를 직접 구축하고 같은 문제가 발생하는지 확인할 계획이며 여기에 결과를 확실히 게시 할 것입니다. 이 문제를 겪은 사람이 있거나이 행동을 일으킬 수있는 원인을 알고 있습니까?

편집하다:
이 예제는 잘 실행됩니다 ... 디버깅이 있습니다.

두 번째 편집 :
나는 그것을 얻지 못합니다. 다른 것은 다른 일은 호스트/포트입니다.
예제는 char* argv []를 사용하고 있습니다.

char host[] = "localhost";
char port[] = "80";

세 번째 편집 :
실제로 Connect에서 차단하는 것 같습니다. fflush (stdout)를 잊어 버렸습니다. 그런 다음 소켓에 문제가 있어야합니다. 더 많은 테스트를 할 것입니다.

네 번째 편집 :
멍청 해요, 전혀 막지 못했습니다! 콘솔 출력에 너무 의존하고있었습니다 ..

도움이 되었습니까?

해결책

printf 이후 연결 호출이 차단 될 것입니다.

stdout은 기본적으로 라인 버퍼링되어 있으며 Printf 문자열의 끝에 a n이 없으므로 출력이 표시되지 않습니다. 프로그램을 죽일 때 버퍼가 플러시되고 있으므로 메시지가 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top