version 1.3, 2001/12/25 08:26:09
|
version 1.4, 2002/03/03 04:17:22
|
|
|
#include "Monitor.h" | #include "Monitor.h" |
#include "MessageQueue.h" | #include "MessageQueue.h" |
#include "Socket.h" | #include "Socket.h" |
|
#include <Pegasus/Common/Tracer.h> |
| |
#ifdef PEGASUS_OS_TYPE_WINDOWS | #ifdef PEGASUS_OS_TYPE_WINDOWS |
# if defined(FD_SETSIZE) && FD_SETSIZE != 1024 | # if defined(FD_SETSIZE) && FD_SETSIZE != 1024 |
|
|
| |
if (events) | if (events) |
{ | { |
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
|
"Monitor::run - Socket Event Detected events = %d", events); |
|
|
MessageQueue* queue = MessageQueue::lookup(_entries[i].queueId); | MessageQueue* queue = MessageQueue::lookup(_entries[i].queueId); |
| |
if (!queue) | if (!queue) |
|
|
if (events & SocketMessage::WRITE) | if (events & SocketMessage::WRITE) |
{ | { |
FD_CLR(socket, &_rep->active_wr_fd_set); | FD_CLR(socket, &_rep->active_wr_fd_set); |
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
|
"Monitor::run FD_CLR WRITE"); |
} | } |
| |
if (events & SocketMessage::EXCEPTION) | if (events & SocketMessage::EXCEPTION) |
{ | { |
FD_CLR(socket, &_rep->active_ex_fd_set); | FD_CLR(socket, &_rep->active_ex_fd_set); |
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
|
"Monitor::run FD_CLR EXECEPTION"); |
} | } |
| |
if (events & SocketMessage::READ) | if (events & SocketMessage::READ) |
{ | { |
FD_CLR(socket, &_rep->active_rd_fd_set); | FD_CLR(socket, &_rep->active_rd_fd_set); |
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
|
"Monitor::run FD_CLR READ"); |
} | } |
| |
count--; | count--; |
|
|
Uint32 events, | Uint32 events, |
Uint32 queueId) | Uint32 queueId) |
{ | { |
|
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::solictSocketMessage"); |
|
|
// See whether a handler is already registered for this one: | // See whether a handler is already registered for this one: |
| |
Uint32 pos = _findEntry(socket); | Uint32 pos = _findEntry(socket); |
| |
if (pos != PEGASUS_NOT_FOUND) | if (pos != PEGASUS_NOT_FOUND) |
|
{ |
|
PEG_METHOD_EXIT(); |
return false; | return false; |
|
} |
| |
// Set the events: | // Set the events: |
| |
|
|
| |
// Success! | // Success! |
| |
|
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
| |
Boolean Monitor::unsolicitSocketMessages(Sint32 socket) | Boolean Monitor::unsolicitSocketMessages(Sint32 socket) |
{ | { |
|
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::unsolicitSocketMessage"); |
|
|
// Look for the given entry and remove it: | // Look for the given entry and remove it: |
| |
for (Uint32 i = 0, n = _entries.size(); i < n; i++) | for (Uint32 i = 0, n = _entries.size(); i < n; i++) |
|
|
FD_CLR(socket, &_rep->wr_fd_set); | FD_CLR(socket, &_rep->wr_fd_set); |
FD_CLR(socket, &_rep->ex_fd_set); | FD_CLR(socket, &_rep->ex_fd_set); |
_entries.remove(i); | _entries.remove(i); |
|
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
} | } |
| |
|
PEG_METHOD_EXIT(); |
return false; | return false; |
} | } |
| |