FIONBIO 的 Winsocks 定义的实际数字是多少?

1 c sockets winsock

我正在使用不支持系统包含文件的解释性脚本语言。

我需要许多 Winsock #defines 的数字。对于大多数人来说,我只能搜索文件并得到如下答案:

#define AF_INET6  23
Run Code Online (Sandbox Code Playgroud)

但对于 FIONBIO 我看到

#define FIONBIO   _IOW('f', 126, u_long)
Run Code Online (Sandbox Code Playgroud)

查找_IOW节目

#define _IOW(x,y,t)      (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
Run Code Online (Sandbox Code Playgroud)

我为此找到了一些片段:

#define IOCPARM_MASK      0x7f
#define IOC_IN    0x80000000
Run Code Online (Sandbox Code Playgroud)

但是当我试图弄清楚结果是什么时,我在转弯的某个地方迷路了。

谁能告诉我 FIONBIO 应该是多少号?我确实在某处找到了一个帖子,其中随意提到在某些 UNIX 版本中有:

#define FIONBIO         := 0x5421
Run Code Online (Sandbox Code Playgroud)

我似乎无法让 windows Winsock 定义变成那个数字,而且我不确定它是否应该在任何情况下都相同。

有人可以告诉我答案吗?或者我必须下载一些windows开发环境并编写一个C程序来打印出值?:)

Joa*_*son 5

#include <winsock.h>

int main()
{
    printf("FIONBIO is size %u with value %u (0x%x)\n", 
        sizeof(FIONBIO), FIONBIO, FIONBIO);
}
Run Code Online (Sandbox Code Playgroud)

给出输出;

FIONBIO is size 4 with value 2147772030 (0x8004667e)
Run Code Online (Sandbox Code Playgroud)

  • `ioctlsocket`的cmd参数很长,所以FIONBIO的实际值应该用`%ld`打印出来,是-2147195266 (2认同)