Почему зависает при вызове connect WSA?

#include <iostream>
#include <winsock2.h>
#include <Ws2tcpip.h>
#include <cstring>

int main(){
  std::cout << "vvvvvvv" << std::endl;
  WSADATA wsaData;
  if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
    std::cout << "nananan" << std::endl;
  }
  std::cout << "sock" << std::endl;
  SOCKET sock = socket(2,1,0);
  if(sock == INVALID_SOCKET){
    std::cout << "trrrr" << std::endl;
  }
  struct addrinfo *result = NULL,*ptr = NULL,hints;
  ZeroMemory( &hints, sizeof(hints) );
  hints.ai_family = AF_UNSPEC;
  hints.ai_socktype = SOCK_STREAM;
  hints.ai_protocol = IPPROTO_TCP;
  std::cout << "addr" << std::endl;
  if(getaddrinfo("1.1.1.1", "80", &hints, &result) != 0){
    std::cout << "zzhhhh" << std::endl;
  }
  ptr = result->ai_next;
  std::cout << "conn" << std::endl;
  if(connect(sock, ptr->ai_addr, (int)ptr->ai_addrlen) == SOCKET_ERROR){
    std::cout << "thr thr" << std::endl;
  }
  std::cout << "vrum" << std::endl;
  const char *buff = "HEAD / HTTP/1.1\r\nHost: 1.1.1.1\r\n\r\n";
  send(sock,buff,strlen(buff),0);
  char rcv[1023];
  recv(sock,rcv,1023,0);
  std::cout << rcv << std::endl;
  WSACleanup();
  return 0;
}


Доходит до connect а потом зависает и выскакивает поиск ошибок виндовс в консоли ошибок нету. Соединение так и не открывается.
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
А зачем вы делаете ptr = result->ai_next;?

В документации есть пример, как обрабатывать результат:
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

Наверняка, оно у вас возвращает одну запись, а вы сразу берете следующую, которой не существует. И дальше разыменовываете нулевой указатель ptr.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы