клиент яндекс переводчика
От: plastictown Норвегия  
Дата: 12.06.17 14:21
Оценка:
Доброго времени суток! Я с детства не перевариваю сети, но куда же без них, поэтому решил написать клиент переводчика на си, чтобы веселее жилось. Взял код клиента из man 3 getaddrinfo, кажется. Собственно, код:
int main (int argc, char** argv)
{
    const char* addr="www.translate.yandex.ru";
    struct addrinfo hints;
    struct addrinfo* result;
    int s=0, sfd=0, cr=0;

    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family=AF_UNSPEC;
    hints.ai_socktype=SOCK_STREAM;
    hints.ai_flags=AI_PASSIVE | AI_CANONNAME;

    s=getaddrinfo(addr, NULL, &hints , &result);
    if(s!=0){
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
            exit(EXIT_FAILURE);
    }else{
        struct addrinfo* ai=result;

        for(ai=result; ai!=NULL; ai=ai->ai_next){
            if(ai->ai_canonname!=NULL)
                printf("%s\n",ai->ai_canonname);
            sfd=socket(ai->ai_family, ai->ai_socktype, 0);
            if(sfd==-1) continue;
            printf("socket - [OK]\n");
;
            cr=connect(sfd, ai->ai_addr, ai->ai_addrlen);
            printf("connect result: %d\n", cr);
            if(cr!=-1) break;
            close(sfd);
        }
        
        if(ai==NULL){
            fprintf(stderr, "Could not connect\n");
            freeaddrinfo(result);
            close(sfd);
            exit(EXIT_FAILURE);
        }
        printf("connect - [OK]\n");;
    }

    freeaddrinfo(result);
    close(sfd);
    return 0;
}


Ничего пока не делает. Нормально ли то, что коннектится только при SOCK_DGRAM, и если в getaddrinfo передавать NULL вторым параметром, то он подключается и тип подключения SOCK_DGRAM? Если в hints вписать SOCK_STREAM, то на connect() виснет на какое-то время, а потом возвращает -1. Я проверял на разных хостах. По http коннект по UDP отрабатывает, по https не работает вообще.
В чем я неправ, кроме того, что начал писать веб-клиента на си?
Спасибо!
Отредактировано 12.06.2017 16:51 plastictown . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.