2012-03-14 6 views
0

클래스 C에서 기본 프록시 서버를 쓰고 있습니다.gethostbyname, 인터넷에 연결되어 있습니까?

나는 파이어 폭스로 테스트 중이며, 서버가 브라우저의 요청을 성공적으로 받고있다.

하지만 이제 브라우저에서 원하는 페이지를 얻으려면 인터넷에 보내야합니다. 나는 주저합니다.

다음은 현재 연결 코드입니다.

포트 8080이 맞는지 잘 모르겠지만 "gethostbyname"을 넣을 항목을 모르겠습니다. 그게 제가 조언을 구하는 부분이었습니다.

int sock = socket(PF_INET, SOCK_STREAM, 0); 

    if (sock < 0) 
    { 
    perror("socket() failed"); 
    return EXIT_FAILURE; 
    } 

    struct sockaddr_in server; 
    struct hostent * hp; 

    server.sin_family = PF_INET; 
    hp = gethostbyname("localhost"); 
    if (hp == NULL) 
    { 
    perror("Unknown host"); 
    return EXIT_FAILURE; 
    } 

    bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length); 
    int port = 8080; 
    server.sin_port = htons(port); 

    if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) 
    { 
    perror("connect() failed"); 
    return EXIT_FAILURE; 
    } 
+0

내 자신의 질문 -을 답변 -> port는 80이어야합니다. hostname은 브라우저 요청 내에서 찾을 수 있습니다. http://www.cs.mit.edu/answers.txt를 원하면 호스트 이름은 www.cs.mit.edu입니다. – Aerovistae

답변

2

전체 gethostbyname까지도 주위 복사 그건 (하 - 심지어 지나치게 오래된 bcopy으로는) ... 단지 getaddrinfo를 사용 (광범위한 오류가 간결 남겨 검사) :

int ret = getaddrinfo("localhost", "80" /* (or 8080, whichever applies) */, NULL, &res); 
if (ret == 0) { 
    const struct addrinfo *r; 
    for (r = res; r != NULL || ret != 0; r = r->ai_next) 
     ret = connect(fd, res->ai_addr, res->ai_addrlen); 
} 
freeaddrinfo(res); 
관련 문제