C - Замораживание при подключении () - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь подключить сокет к серверу (в данном случае «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

Я должен выйти, потому что Программа ничего не делает и не завершает работу.

...