-1

我在使用 Select() 来确定何时可以在套接字上读取数据时遇到了一些问题。我希望我连接的套接字没有数据,因此 select 返回超时或 0 值。相反,我得到 -1 值,消息是“错误:没有错误”。

我的代码与此示例非常相似:https ://beej.us/guide/bgnet/html/multi/selectman.html

我在这里通读了几次 select() 文档:msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx

任何想法,将不胜感激。谢谢!

规格:C++、Win-XP、Microsoft Visual C++ 2010

4

1 回答 1

3

在实际创建套接字之前,您正在将套接字添加到 fd_set 结构中:

FD_SET(s, &readfds);
// (...)
int iConnected = ConnectToHost(PortNum, IpAddy);
//^ This actually calls: s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

因此,您正在向 fd_set 添加一个无效的套接字。在执行此操作之前创建套接字:

int iConnected = ConnectToHost(PortNum, IpAddy);
//(...)
FD_SET(s, &readfds);
于 2012-02-27T20:06:23.443 回答