- COMSTACK cs = comstack();
- void *ap = cs_straddr (cs, addr);
- if (!ap)
- return;
- int res = cs_connect (cs, ap);
- if (res < 0)
- {
- logf (LOG_DEBUG, "Yaz_PDU_Assoc::connect failed");
- close ();
+ void *ap;
+ m_cs = comstack(addr, &ap);
+ if (!m_cs)
+ return -1;
+ int res = cs_connect (m_cs, ap);
+ yaz_log (m_log, "Yaz_PDU_Assoc::connect fd=%d res=%d", cs_fileno(m_cs),
+ res);
+ m_socketObservable->addObserver(cs_fileno(m_cs), this);
+
+ if (res == 0)
+ { // Connect complete
+ m_state = Connecting;
+ unsigned mask = YAZ_SOCKET_OBSERVE_EXCEPT;
+ mask |= YAZ_SOCKET_OBSERVE_WRITE;
+ mask |= YAZ_SOCKET_OBSERVE_READ;
+ yaz_log(m_log, "maskObserver 11");
+ m_socketObservable->maskObserver(this, mask);
+ }
+ else if (res > 0)
+ { // Connect pending
+ m_state = Connecting;
+ unsigned mask = YAZ_SOCKET_OBSERVE_EXCEPT;
+ if (m_cs->io_pending & CS_WANT_WRITE)
+ mask |= YAZ_SOCKET_OBSERVE_WRITE;
+ if (m_cs->io_pending & CS_WANT_READ)
+ mask |= YAZ_SOCKET_OBSERVE_READ;
+ yaz_log(m_log, "maskObserver 11");
+ m_socketObservable->maskObserver(this, mask);