Портирование на windows розетки - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь перенести устаревший код и заметил несколько проблем.

Я выделил код для простого примера. Что не так с кодом создания сокета ниже?

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

int main()
{
    std::cout << "Hello World!\n";
    sockaddr_in sockAddr;
    uint16_t PortNumber = 2000;
    memset(&sockAddr, 0, sizeof(sockAddr));
    sockAddr.sin_family = AF_INET;
    sockAddr.sin_port = htons(PortNumber);
    sockAddr.sin_addr.s_addr = 0;
    auto result = socket(AF_INET, SOCK_STREAM, 0);

    if (result == INVALID_SOCKET)
    {
        auto err = WSAGetLastError();
        std::cout << "Unable to create listening socket on port " << PortNumber << "with error "  << err;
    }
    else std::cout << "No socket error \n";
}

enter image description here

1 Ответ

3 голосов
/ 03 марта 2020

Вам необходимо инициализировать его перед выполнением любого вызова сокета.

int iResult; 
// Initialize Winsock 
iResult = WSAStartup(MAKEWORD(2,2), &wsaData); 
if (iResult != 0) 
{ 
   printf("WSAStartup failed: %d\n", iResult); 
   return 1; 
}
...