我在使用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
答案 0 :(得分: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);