来自winsock2.h的摘录:
#define FD_SET(fd, set) do { u_int __i;\
for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
break;\
}\
}\
if (__i == ((fd_set *)(set))->fd_count) {\
if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\
((fd_set *)(set))->fd_array[__i] = (fd);\
((fd_set *)(set))->fd_count++;\
}\
}\
} while(0)
我传递的fd
int
类型set
和fd_set *
类型FD_SETSIZE
。看起来警告的原因可能来自#ifndef FD_SETSIZE
#define FD_SETSIZE 64
#endif
的#define。另一个摘录来自同一标题:
FD_SETSIZE
在包含winsock2.h之前,我将64U
重新定义为{{1}},但这似乎无法修复它。
答案 0 :(得分:0)
fd
的类型SOCKET
应为u_int
。
宏的相关行是:
if (((fd_set *)(set))->fd_array[__i] == (fd)) {
我没想到==
无论出于什么原因都是比较运算符。