+#include <yazpp/socket-manager.h>
+#include <yaz/poll.h>
+
+using namespace yazpp_1;
+
+struct SocketManager::SocketEntry {
+ ISocketObserver *observer;
+ int fd;
+ unsigned mask;
+ int timeout;
+ int timeout_this;
+ time_t last_activity;
+ SocketEntry *next;
+};
+
+struct SocketManager::SocketEvent {
+ ISocketObserver *observer;
+ int event;
+ SocketEvent *next; // front in queue
+ SocketEvent *prev; // back in queue
+};
+
+struct SocketManager::Rep {
+ void putEvent(SocketEvent *event);
+ SocketEvent *getEvent();
+ void removeEvent(ISocketObserver *observer);
+ void inspect_poll_result(int res, struct yaz_poll_fd *fds, int no_fds,
+ int timeout);
+ SocketEntry **lookupObserver(ISocketObserver *observer);
+ SocketEntry *observers; // all registered observers
+ SocketEvent *queue_front;
+ SocketEvent *queue_back;
+ int log;
+};
+
+SocketManager::SocketEntry **SocketManager::Rep::lookupObserver(
+ ISocketObserver *observer)