Ошибка 10038 при подключении winsock

Я пытаюсь установить простое соединение с серверным приложением, работающим на том же компьютере, что и клиент.

Мой код выглядит так:

void Base::Connect(string ip, string port)
{
    int status;
    SOCKET ConnectSocket = INVALID_SOCKET;
    struct addrinfo hints;
    struct addrinfo *servinfo;  // will point to the results

    memset(&hints, 0, sizeof hints); // make sure the struct is empty
    hints.ai_family = AF_UNSPEC;     // don't care IPv4 or IPv6
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets

    // get ready to connect
    status = getaddrinfo(ip.c_str(), port.c_str(), &hints, &servinfo);

    // Socket Setup
    if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET)
    {
        printf("[NETWORKING] An error occured when setting up socket\n");
    }

    // Connect
    if (connect(ConnectSocket, servinfo->ai_addr, (int)servinfo->ai_addrlen) == SOCKET_ERROR)
    {
        int error = WSAGetLastError();
        printf("Connect error: ", error);
    }
}

Заранее звоню WSAStartup() и это не выдает никаких ошибок. Если сервер включен или выключен, ошибка не меняется.

IP-адрес, который я использую, - 127.0.0.1, и я подключаюсь через порт 80. Я пробовал что-то другое (1337), которое выдало мне ту же ошибку.

Что-то явно не так? Любые идеи о том, что может пойти не так?

1 ответ

Решение
if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET)

Вы сравниваете сокет (...) с INVALID_SOCKET
и затем вы назначаете результат true/false для ConnectSocket.
использование

if ((ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == INVALID_SOCKET)

Смотрите списки приоритетов операторов C++

Другие вопросы по тегам