我正在用Winsock编写用C编写的程序,并且正在使用命令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>

请帮帮我。
提前致谢。

最佳答案

我认为在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

10-02 06:40