2012-02-27 71 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