GetHostbyName, подключение к Интернету в целом?
-
14-12-2019 - |
Вопрос
Я пишу базовый прокси-сервер в C для класса.
Я проверяю с 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;
}
. Решение
Это целое 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);
. Не связан с StackOverflow