2011-05-24 52 views
0

我正在編寫一個使用select()的程序,給定一個要讀取的fd_set。
在程序中,我保存了兩個fd_sets:
1. fd_set命名爲DB,所有的fd都可以處理。
2. fd_set named toSelect - 我發送給select()方法,並在select()返回後處理。operator = on fd_set - 套接字通信linux

在調用select()之前,我正在這樣做:
toSelect = DB;
爲了將DB中的所有fd複製到toSelect fd_set。
由於我的程序工作不太好(想出了「通過對等方重置連接」的消息),我的代碼可能有問題。
這個任務可以嗎? 如果不是,我怎麼能複製一個fd_set到另一個沒有使用operator =?
謝謝。

+1

在此處發佈時,請嘗試區分C和C++ - select()API是C/POSIX API。 – 2011-05-24 18:24:54

回答

0

而不是在做toSelect = DB,嘗試使用FD_ISSET和FD_SET宏將值從一個複製到另一個,並查看問題是否仍然存在。

+0

它仍然無法正常工作。 – Zach 2011-05-24 17:55:25

+0

@Jay,然後把你的一些代碼說明問題 – littleadv 2011-05-24 18:22:21

0

fd_set的內部細節包括operator =是否被定義(並且通過編譯)是實現定義的。 fd_set承諾給你的唯一的東西是它以宏(或函數)FD_SET,FD_CLEAR,FD_ISSET,FD_ZERO的形式提供的接口。

如果你想能夠使用operator =你可以爲它編寫你自己的包裝類。

+0

說什麼?賦值是爲所有C數據類型定義的,包括用戶定義的,以及用於所有POD類型的C++。 fd_set與C++沒有任何特別的關係。 – 2011-05-24 18:22:45

+0

@ Neil是的,我錯誤地認爲它可能不會通過編譯,但被定義並不能使這樣的陳述正確。使用operator =不是fd_set的承諾接口的一部分。 – selalerer 2011-05-24 19:17:07

+0

是的,它是 - fd_set是一個POD。 – 2011-05-24 19:24:04