Я пытаюсь подключить сокет к серверу (в данном случае «google.com»).
Я пробовал аналогично коду примера на странице справки getaddrinfo, но программа зависает перед подключением.
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
struct addrinfo *results = NULL;
struct addrinfo *rp;
int sfd;
int gai = getaddrinfo("google.com", NULL, NULL, &results);
printf("getaddrinfo returns %d \n", gai);
printf("rp = %p \n", rp);
printf("results = %p \n", results);
for (rp = results; rp != NULL; rp = rp->ai_next)
{
sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
printf("sfd is %d \n", sfd);
if (sfd == -1)
{
printf("sfd is %d \n", sfd);
continue;
}
printf("trying to connect...");
if (connect(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
printf("success \n");
break; /* success */
printf("now im before close");
close(sfd);
}
}
Вывод:
getaddrinfo returns 0
rp = 0x7ffd14df9020
results = 0x55eaa3f60f60
sfd is 3
^C
Я должен выйти, потому что Программа ничего не делает и не завершает работу.