У меня есть вполне смущающая проблема. Следующий код просто не создаст сокет в Windows; это приводит к сбою и отображает сообщение об ошибке. Кто-либо мог кратко объяснить, почему это могло бы быть? Я невероятно смущен и разбил это, что-то настолько простое перестало работать.Спасибо.
int sock;
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
{
printf("error opening socket");
}
Править: Кроме того, распечатывание strerror (errno) просто не показывает "Ошибки".
Нужно вызвать WSAStartup()
прежде чем любые другие функции сокета будут работать на Windows (и вы должны вызвать WSACleanup()
, когда закончите).
Джерри Коффин прав насчет 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)) )
, даже если это не является первопричиной.
.