Как создать сокет через socket () на MSVC? - PullRequest
1 голос
/ 28 марта 2011

Я портирую приложение linux под win32 (msvc 9.0) и, наконец, закончив его, я испытываю поведение не по умолчанию для простых вещей, как socket().

#include <winsock2.h>
#include <ws2tcpip.h>

int main(int argc, char **argv)
{
    int subsock;
    if ((subsock = socket(PF_INET, SOCK_STREAM, 0)) < 0 ) { 
        printf("Failed to open socket (ret value = %d)\n", subsock);
    }
}

Это печатает Failed to open socket (ret value = -1)каждый раз.Что не так и как открыть сокет на win32?

1 Ответ

3 голосов
/ 28 марта 2011

Вам нужно вызвать WSAStartup для инициализации winsock, прежде чем последующие вызовы сокета будут успешными.

WORD wVersionRequested;
WSADATA wsaData;
int err;

/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData)
if (err != 0)
{
    YourError!
}
else
{
    // success
}

Для более подробной информации:

http://msdn.microsoft.com/en-us/library/ms742213%28VS.85%29.aspx

Просто запросите версию 2.2 и покончите с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...