- close ();
-#endif
- }
- else
- {
- logf (LOG_LOG, "Yaz_PDU_Assoc::connect fd=%d", cs_fileno(cs));
- m_socketObservable->addObserver(cs_fileno(cs), this);
- m_socketObservable->maskObserver(this, YAZ_SOCKET_OBSERVE_READ|
- YAZ_SOCKET_OBSERVE_EXCEPT|
- YAZ_SOCKET_OBSERVE_WRITE);
- if (res == 1)
- {
- logf (LOG_LOG, "Yaz_PDU_Assoc::connect pending");
- m_state = Connecting;
- }
- else
- {
- logf (LOG_LOG, "Yaz_PDU_Assoc::Connect complete");
- m_state = Connected;
- }
- }
+
+#include <yaz-socket-manager.h>
+#include <pthread.h>
+
+class thread_info {
+ Yaz_SocketManager *socketManager;
+ IYaz_PDU_Observable *
+
+};
+
+static void *events(void *p)
+{
+ Yaz_SocketManager *s = (Yaz_SocketManager *) p;
+
+ while (s->processEvent() > 0)
+ ;
+ return 0;
+}
+
+void Yaz_PDU_Assoc::childNotify(int fd)
+{
+ Yaz_SocketManager *socket_observable = new Yaz_SocketManager;
+ IYaz_PDU_Observable *new_observable = clone();
+
+ m_socketObservable = socket_observable;
+
+ /// Clone PDU Observer
+ IYaz_PDU_Observer *observer = m_PDU_Observer->clone(new_observable);
+
+ /// Attach new socket to it
+ new_observable->socket(observer, fd);
+
+ pthread_t type;
+
+ int id = pthread_create (&type, 0, events, socket_observable);
+ logf (LOG_LOG, "pthread_create returned id=%d", id);