【问题标题】:Using Select() and getting "no error" errors returned使用 Select() 并返回“无错误”错误
【发布时间】:2012-02-27 19:31:21
【问题描述】:

我在使用 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

【问题讨论】:

  • 没有看到您的代码,我们无法知道您做错了什么。
  • 谢谢。我应该将整个代码内容放在这篇文章还是另一个文本托管站点中?很长,大部分代码和这个问题完全无关。
  • 创建一个重现问题的简约代码。这也是你找出问题根源的最好方法。
  • 这是一个更“我的代码的最小版本”。对不起,我只能删除一个功能。 pastebin.com/q9pZ33UK
  • @ProGirlXOXO:你可以删除一打东西......(将输出写入文件,等待按键等......)

标签: c++ select windows-xp errno


【解决方案1】:

您正在将您的套接字添加到 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);

【讨论】:

  • 不错的收获。一个可爱的全局变量:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多