在 UDP 套接字中调用 Select() 时出错



我正在Windows Form应用程序中进行套接字编程(UDP套接字)。我想使用 select()。

socket() 在单击按钮时调用,select() 在不同的线程中调用,套接字描述符声明为全局。

以下是我关于选择的代码部分:

fd_set fds;
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 500000;
FD_ZERO(&fds);
FD_SET(s_8888, &fds);
int n=s_8888;  //s_8888 is socket descriptor
select (n+1, &fds, 0 , 0 , &tv );

当我编译我的代码时,我收到以下错误

error C2064: term does not evaluate to a function taking 5 arguments    

我无法理解我哪里做错了。

您可能正在"影子"Winsock 库的功能select(),方法是使用此名称定义另一个可用对象。

此代码

#include <Winsock2.h> /* Provide prototype for select(). */
void foo(void)
{
int select;
...
select(0, 0, 0, 0, 0);

会通过"阴影"函数select()变量int select来引发错误 C2064。

修复此重命名

int select;

int select_whateveryoulike;