2012-03-14 7 views
0

私はクラスのためのCで基本的なプロキシサーバーを書いています。gethostbyname、インターネットに大規模に接続していますか?

私はfirefoxでテストしています。サーバーがブラウザのリクエストを正常に受信しています。

しかし、今ではブラウザに必要なページを入手するためにインターネットに送信する必要があります。私は躊躇しています。

接続のための私の現在のコードです。

ポート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

は自分question-を回答 - > portは80でなければなりません。hostnameはブラウザの要求の中にあります。 http://www.cs.mit.edu/answers.txtが必要な場合、ホスト名はwww.cs.mit.eduです – Aerovistae

答えて

2

全体のgethostbynameこと、(HA - でも、あまりに古い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); 
関連する問題