/*
- * Copyright (c) 1998-1999, Index Data.
+ * Copyright (c) 1998-2000, Index Data.
* See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
*
* $Log: yaz-socket-manager.cpp,v $
- * Revision 1.9 2000-08-07 14:19:59 adam
+ * Revision 1.16 2001-08-13 16:39:12 adam
+ * PDU_Assoc keeps track of children. Using yaz_log instead of logf.
+ *
+ * Revision 1.15 2001/03/26 14:43:49 adam
+ * New threaded PDU association.
+ *
+ * Revision 1.14 2000/11/20 14:17:36 adam
+ * Yet another WIN32 fix for connect notify.
+ *
+ * Revision 1.13 2000/11/20 11:27:33 adam
+ * Fixes for connect operation (timeout and notify fix).
+ *
+ * Revision 1.12 2000/10/24 12:29:57 adam
+ * Fixed bug in proxy where a Yaz_ProxyClient could be owned by
+ * two Yaz_Proxy's (fatal).
+ *
+ * Revision 1.11 2000/10/11 11:58:17 adam
+ * Moved header files to include/yaz++. Switched to libtool and automake.
+ * Configure script creates yaz++-config script.
+ *
+ * Revision 1.10 2000/09/08 10:23:42 adam
+ * Added skeleton of yaz-z-server.
+ *
+ * Revision 1.9 2000/08/07 14:19:59 adam
* Fixed serious bug regarding timeouts. Improved logging for proxy.
*
* Revision 1.8 1999/12/06 13:52:45 adam
#include <string.h>
#include <yaz/log.h>
-#include <yaz-socket-manager.h>
-
+#include <yaz++/yaz-socket-manager.h>
Yaz_SocketManager::YazSocketEntry **Yaz_SocketManager::lookupObserver(
IYazSocketObserver *observer)
YazSocketEntry *p;
YazSocketEvent *event = getEvent();
unsigned timeout = 0;
- logf (m_log, "processEvent");
+ yaz_log (m_log, "Yaz_SocketManager::processEvent manager=%p", this);
if (event)
{
event->observer->socketNotify(event->event);
if (p->mask)
no++;
if (p->mask & YAZ_SOCKET_OBSERVE_READ)
+ {
+ yaz_log (m_log, "Yaz_SocketManager::select fd=%d read", fd);
FD_SET(fd, &in);
+ }
if (p->mask & YAZ_SOCKET_OBSERVE_WRITE)
+ {
+ yaz_log (m_log, "Yaz_SocketManager::select fd=%d write", fd);
FD_SET(fd, &out);
+ }
if (p->mask & YAZ_SOCKET_OBSERVE_EXCEPT)
+ {
+ yaz_log (m_log, "Yaz_SocketManager::select fd=%d except", fd);
FD_SET(fd, &except);
+ }
if (fd > max)
max = fd;
if (p->timeout)
timeout_this = p->timeout;
if (p->last_activity)
timeout_this -= now - p->last_activity;
+ else
+ p->last_activity = now;
if (timeout_this < 1)
timeout_this = 1;
if (!timeout || timeout_this < timeout)
}
if (!no)
{
- logf (m_log, "no pending events return 0");
+ yaz_log (m_log, "no pending events return 0");
if (!m_observers)
- logf (m_log, "no observers");
+ yaz_log (m_log, "no observers");
return 0;
}
to.tv_sec = timeout;
to.tv_usec = 0;
- logf (m_log, "select pending=%d timeout=%d", no, timeout);
+ yaz_log (m_log, "Yaz_SocketManager::select no=%d timeout=%d", no, timeout);
while ((res = select(max + 1, &in, &out, &except, timeout ? &to : 0)) < 0)
if (errno != EINTR)
return -1;
now >= p->last_activity + (int) (p->timeout))
{
YazSocketEvent *event = new YazSocketEvent;
- logf (LOG_LOG, "timeout now = %ld last_activity=%ld timeout=%d",
+ yaz_log (m_log, "timeout, now = %ld last_activity=%ld timeout=%d",
now, p->last_activity, p->timeout);
p->last_activity = now;
event->observer = p->observer;
return 0;
}
+
+// n p n p ...... n p n p
+// front back
+
void Yaz_SocketManager::putEvent(YazSocketEvent *event)
{
// put in back of queue