Использование winsock для программирования сокетов в c - PullRequest
2 голосов
/ 02 марта 2012

Я пишу программу на C, которая использует winsock, и я использую команду fcntl, чтобы запретить приемный вызов, и я получаю следующие ошибки.

warning C4013: 'fcntl' undefined; assuming extern returning int 
error C2065: 'F_SETFL' : undeclared identifier
error C2065: 'F_GETFL' : undeclared identifier
error C2065: 'F_SETFL' : undeclared identifier
error C2065: 'O_NDELAY' : undeclared identifier
error C2065: 'EWOULDBLOCK' : undeclared identifierenter code here

Я включаю winsock2.hЗаголовочный файл в моем коде выглядит следующим образом

#pragma comment(lib,"ws2_32.lib")
#include <winsock2.h>

Пожалуйста, помогите мне.Заранее спасибо.

1 Ответ

7 голосов
/ 02 марта 2012

Я думаю, в Windows вам нужно использовать ioctlsocket вместо fcntl().

Чтобы сделать неблокирование:

unsigned long on = 1;
if (0 != ioctlsocket(socket_fd, FIONBIO, &on))
{
    /* Handle failure. */
}

Чтобы сделать блокировку:

unsigned long off = 0;
if (0 != ioctlsocket(socket_fd, FIONBIO, &off))
{
    /* Handle failure. */
}

Вместо EWOULDBLOCK используйте WSAEWOULDBLOCK.

...