Сообщение клиент яндекс переводчика от 12.06.2017 14:21
Изменено 12.06.2017 16:51 plastictown
клиент яндекс переводчика
Доброго времени суток! Я с детства не перевариваю сети, но куда же без них, поэтому решил написать клиент переводчика на си, чтобы веселее жилось. Взял код клиента из man 3 getaddrinfo, кажется. Чуть меняю. Собственно, код:
Ничего пока не делает. Нормально ли то, что коннектится только при SOCK_DGRAM, и если в getaddrinfo передавать NULL вторым параметром, то он подключается и тип подключения SOCK_DGRAM? Если в hinst вписать SOCK_STREAM, то на connect() виснет на какое-то время, а потом возвращает -1. Я проверял на разных хостах. По http коннект по UDP отрабатывает, по https не работает вообще.
В чем я неправ, кроме того, что начал писать веб-клиента на си?
Спасибо!
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? Если в hinst вписать SOCK_STREAM, то на connect() виснет на какое-то время, а потом возвращает -1. Я проверял на разных хостах. По http коннект по UDP отрабатывает, по https не работает вообще.
В чем я неправ, кроме того, что начал писать веб-клиента на си?
Спасибо!
клиент яндекс переводчика
Доброго времени суток! Я с детства не перевариваю сети, но куда же без них, поэтому решил написать клиент переводчика на си, чтобы веселее жилось. Взял код клиента из man 3 getaddrinfo, кажется. Собственно, код:
Ничего пока не делает. Нормально ли то, что коннектится только при SOCK_DGRAM, и если в getaddrinfo передавать NULL вторым параметром, то он подключается и тип подключения SOCK_DGRAM? Если в hints вписать SOCK_STREAM, то на connect() виснет на какое-то время, а потом возвращает -1. Я проверял на разных хостах. По http коннект по UDP отрабатывает, по https не работает вообще.
В чем я неправ, кроме того, что начал писать веб-клиента на си?
Спасибо!
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 не работает вообще.
В чем я неправ, кроме того, что начал писать веб-клиента на си?
Спасибо!