【发布时间】:2021-05-28 07:42:36
【问题描述】:
我必须实现两种不同协议之间的转换工具。 它应该是一个相对简单的循环,由文件描述符事件触发。 然而,协议 API:
- st API:旨在与 select() 一起使用,它公开了一个 GetFD() 方法,该方法将使用 FD_SET 将 fd 放入给定的 fd_set 中
- nd API:仅适用于 poll()(它是 ZMQ)
有没有什么方法可以在不调用 select() 的情况下从 fd_set 中提取 fd? (最好是便携的)
我已尝试查看 fd_set 结构的来源,但它不是真正可读的,并且可能暗示您不应通过 4 宏 FD_CLR/SET/ISSET/ZERO 之外的任何东西来触摸它。
//Pseudo-code of what i hope to achieve
// Get fd's from API1
fd_set readfds;
FD_ZERO( & readfds );
int max = api1.GetFd(readfds);
struct zmq_pollitem_t poll_items[MAX_COUNT];
int fd_count = 0;
convert_fdset_to_pollitem( readfds , poll_items , fd_count ); //what i need
poll_items[fd_count].fd = api2.GetFD();
poll_items[fd_count].socket = api2.GetSocket();
fd_count++;
const uint32_t timeout_msec = 500;
int ret = zmq_poll( poll_items , fd_count , timeout_msec);
【问题讨论】: