Не может создать сокет в Windows

У меня есть вполне смущающая проблема. Следующий код просто не создаст сокет в Windows; это приводит к сбою и отображает сообщение об ошибке. Кто-либо мог кратко объяснить, почему это могло бы быть? Я невероятно смущен и разбил это, что-то настолько простое перестало работать.Спасибо.

int sock;
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
{
    printf("error opening socket");
}

Править: Кроме того, распечатывание strerror (errno) просто не показывает "Ошибки".

8
задан 5 January 2010 в 05:17
поделиться

2 ответа

Нужно вызвать WSAStartup() прежде чем любые другие функции сокета будут работать на Windows (и вы должны вызвать WSACleanup(), когда закончите).

.
11
ответ дан 5 December 2019 в 11:25
поделиться

Джерри Коффин прав насчет WSAStartup() и WSACleanup().

Также обратите внимание, что этот код

if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )

является проблематичным, так как SOCKET является беззнаковым типом (unsigned int).

Из winsock.h

/*
 * This is used instead of -1, since the
 * SOCKET type is unsigned.
 */
#define INVALID_SOCKET  (SOCKET)(~0)
#define SOCKET_ERROR            (-1)

Таким образом, IMO лучше заменить эту строку на

if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )

, даже если это не является первопричиной.

.
2
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

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