libassa  3.5.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Private Types | Private Attributes | List of all members
ASSA::FdSet Class Reference

Class FdSet. More...

#include <FdSet.h>

Public Member Functions

 FdSet ()
 Constructor.
bool setFd (handler_t fd_)
 Set flag (ON) for the argument fd.
bool clear (handler_t fd_)
 Clear flag (OFF) for the argument fd.
bool isSet (handler_t fd_)
 Test whether fd's flag is on.
void sync ()
 Sync internals after used by select(3C)
void reset ()
 Reset every bit in the set (OFF).
int maxInSet ()
 Find out the highest file descriptor in the set.
int numSet ()
 Determine how many bits are set (ON) in the set.
void dump ()
 Determine highest handler in the set.
std::string dump_c_str ()
 Return object state dump as an ASCII string.

Private Types

typedef std::list< u_int >
::iterator 
ActiveFDs_Iter

Private Attributes

std::list< u_intm_actfds

Detailed Description

Class FdSet.

Wrapper around struct fd_set. This class hides the differences between UNIX/POSIX and WIN32 implementations of fd_set data structure.

The main difference is that while fd_set on POSIX system is represented as bit flags, the same structure on WIN32 system is opaque and not limited by FD_SETSIZE.

In fact, it is represented as an array of SOCKETs (read u_int[FD_SETSIZE]) along with the number of FDs in the set. This allows a WIN32 socket descriptor value to fall anywhere in the range from 0 to max(u_int -1).

handler_t type hides the type difference.

Definition at line 51 of file FdSet.h.

Member Typedef Documentation

typedef std::list<u_int>::iterator ASSA::FdSet::ActiveFDs_Iter
private

Definition at line 110 of file FdSet.h.

Constructor & Destructor Documentation

ASSA::FdSet::FdSet ( )
inline

Constructor.

Definition at line 119 of file FdSet.h.

References reset().

{ reset (); }

Member Function Documentation

bool FdSet::clear ( handler_t  fd_)

Clear flag (OFF) for the argument fd.

Parameters
fd_Bit to clear
Returns
false if argument is out of bounds; true otherwise.

Definition at line 39 of file FdSet.cpp.

References DL, isSet(), m_actfds, and ASSA::REACT.

Referenced by ASSA::Reactor::checkFDs(), ASSA::Reactor::dispatchHandler(), ASSA::Reactor::removeHandler(), and ASSA::Reactor::removeIOHandler().

{
DL ((REACT,"Clearing fd=%d\n", fd_));
if (!isSet (fd_)) {
DL ((REACT,"Not set! - ignoring.\n"));
return false;
}
FD_CLR (fd_, this);
if (FD_ISSET (fd_, this)) {
DL ((REACT,"Woop - an error! FD_CLR failed!\n"));
}
#if !defined (WIN32)
iter = std::find (m_actfds.begin (),
m_actfds.end (),
fd_);
if (iter != m_actfds.end ()) {
DL ((REACT,"fd=%d found and erased\n", fd_));
m_actfds.erase (iter);
}
else {
DL ((REACT,"fd=%d not found in m_actfds list!\n", fd_));
}
#endif
return true;
}
void ASSA::FdSet::dump ( )
inline

Determine highest handler in the set.

Returns
highest value in the setWrite to debug log all bits set.

Definition at line 120 of file FdSet.h.

References DL, dump_c_str(), and ASSA::REACT.

{ DL ((REACT, "%s\n", dump_c_str ().c_str ())); }
std::string FdSet::dump_c_str ( )

Return object state dump as an ASCII string.

Definition at line 116 of file FdSet.cpp.

References ASSA::ends(), m_actfds, and numSet().

Referenced by ASSA::MaskSet::dump(), and dump().

{
std::ostringstream report;
report << " enabled=" << numSet ();
#if defined (WIN32)
if (this->fd_count) {
report << " : ";
}
for (int i=0; i < this->fd_count; i++) {
report << " " << this->fd_array[i];
}
#else /* UNIX */
ActiveFDs_Iter iter = m_actfds.begin ();
if (m_actfds.size ()) {
report << " : ";
}
while (iter != m_actfds.end ()) {
report << " " << (u_int)*iter;
iter++;
}
#endif
report << std::ends;
return (report.str ());
}
bool ASSA::FdSet::isSet ( handler_t  fd_)
inline

Test whether fd's flag is on.

Parameters
fd_Bit to test
Returns
true if fd_ bit is set; false otherwise

Definition at line 122 of file FdSet.h.

Referenced by clear(), ASSA::Reactor::dispatchHandler(), and sync().

{ return FD_ISSET (fd_, this); }
int FdSet::maxInSet ( )

Find out the highest file descriptor in the set.

Returns
highest value of file descriptor.

Definition at line 101 of file FdSet.cpp.

References m_actfds.

Referenced by ASSA::MaskSet::max_fd().

{
#if defined (WIN32)
return 0; // win32 select doesn't need this value
#else
if (m_actfds.size () == 0) {
return 0;
}
ActiveFDs_Iter iter = std::max_element (m_actfds.begin (), m_actfds.end ());
return (*iter);
#endif
}
int ASSA::FdSet::numSet ( )
inline

Determine how many bits are set (ON) in the set.

Returns
Number of bits set

Definition at line 126 of file FdSet.h.

References m_actfds.

Referenced by dump_c_str(), and ASSA::Reactor::isAnyReady().

{
#if defined (WIN32)
return this->fd_count;
#else /* UNIX */
return m_actfds.size ();
#endif
}
void FdSet::reset ( )

Reset every bit in the set (OFF).

Definition at line 90 of file FdSet.cpp.

References m_actfds.

Referenced by FdSet(), ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::handle_read(), and ASSA::MaskSet::reset().

{
::memset(this, 0, sizeof (fd_set));
#if !defined (WIN32)
m_actfds.clear ();
#endif
}
bool FdSet::setFd ( handler_t  fd_)

Set flag (ON) for the argument fd.

Parameters
fd_Bit to set.
Returns
false if argument is out of bounds, true otherwise.

Definition at line 20 of file FdSet.cpp.

References m_actfds.

Referenced by ASSA::Reactor::checkFDs(), ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::handle_read(), and ASSA::Reactor::registerIOHandler().

{
FD_SET (fd_, this);
#if !defined (WIN32)
iter = std::find (m_actfds.begin (),
m_actfds.end (),
fd_);
if (iter == m_actfds.end ()) { // not found
m_actfds.push_back (fd_);
}
#endif
return true;
}
void FdSet::sync ( )

Sync internals after used by select(3C)

Definition at line 72 of file FdSet.cpp.

References isSet(), and m_actfds.

Referenced by ASSA::MaskSet::sync().

{
#if !defined (WIN32)
restart:
iter = m_actfds.begin ();
while (iter != m_actfds.end ()) {
if (!isSet (*iter)) {
m_actfds.erase (iter);
goto restart;
}
iter++;
}
#endif
}

Member Data Documentation

std::list<u_int> ASSA::FdSet::m_actfds
private

Definition at line 112 of file FdSet.h.

Referenced by clear(), dump_c_str(), maxInSet(), numSet(), reset(), setFd(), and sync().


The documentation for this class was generated from the following files: