2011-05-24 53 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