2012-02-27 76 views
0

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

我的代码非常相似,这个例子:http://beej.us/guide/bgnet/output/html/multipage/selectman.html

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

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

具体细节:C++,WIN-XP,微软的Visual C++ 2010

我的 '最小' 的代码是在这里:http://pastebin.com/q9pZ33UK

+2

没有看到您的代码,我们无法知道您做错了什么。 – 2012-02-27 19:34:09

+0

谢谢。我是否应该将整个代码内容放入此文章或其他文本托管网站?它很长,大部分代码与这个问题完全无关。 – ProGirlXOXO 2012-02-27 19:41:50

+0

创建一个复制问题的简约代码。这也是你找出问题根源的最好方法。 – 2012-02-27 19:58:16

回答

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); 
+0

不错。一个可爱的全球变量:) – 2012-02-27 20:12:33

+0

非常感谢你! – ProGirlXOXO 2012-02-27 21:59:12