Classes | Public Member Functions | Private Types | Private Attributes
FIX::SocketServer Class Reference

Listens for and accepts incoming socket connections on a port. More...

#include <SocketServer.h>

Collaboration diagram for FIX::SocketServer:
Collaboration graph
[legend]

List of all members.

Classes

class  Strategy

Public Member Functions

 SocketServer (int timeout=0)
int add (int port, bool reuse=false, bool noDelay=false, int sendBufSize=0, int rcvBufSize=0) throw ( SocketException& )
int accept (int socket)
void close ()
bool block (Strategy &strategy, bool poll=0, double timeout=0.0)
int numConnections ()
SocketMonitorgetMonitor ()
int socketToPort (int socket)
int portToSocket (int port)

Private Types

typedef std::map< int, SocketInfoSocketToInfo
typedef std::map< int, SocketInfoPortToInfo

Private Attributes

SocketToInfo m_socketToInfo
PortToInfo m_portToInfo
SocketMonitor m_monitor

Detailed Description

Listens for and accepts incoming socket connections on a port.

Definition at line 56 of file SocketServer.h.


Member Typedef Documentation

typedef std::map<int, SocketInfo> FIX::SocketServer::PortToInfo [private]

Definition at line 79 of file SocketServer.h.

typedef std::map<int, SocketInfo> FIX::SocketServer::SocketToInfo [private]

Definition at line 77 of file SocketServer.h.


Constructor & Destructor Documentation

FIX::SocketServer::SocketServer ( int  timeout = 0)

Definition at line 94 of file SocketServer.cpp.

: m_monitor( timeout ) {}

Member Function Documentation

int FIX::SocketServer::accept ( int  socket)

Definition at line 121 of file SocketServer.cpp.

References FIX::SocketMonitor::addConnect(), m_monitor, FIX::SocketInfo::m_noDelay, FIX::SocketInfo::m_rcvBufSize, FIX::SocketInfo::m_sendBufSize, m_socketToInfo, FIX::socket_accept(), and FIX::socket_setsockopt().

Referenced by FIX::ServerWrapper::onEvent().

{
  SocketInfo info = m_socketToInfo[socket];

  int result = socket_accept( socket );
  if( info.m_noDelay )
    socket_setsockopt( result, TCP_NODELAY );
  if( info.m_sendBufSize )
    socket_setsockopt( result, SO_SNDBUF, info.m_sendBufSize );
  if( info.m_rcvBufSize )
    socket_setsockopt( result, SO_RCVBUF, info.m_rcvBufSize );
  if ( result >= 0 )
    m_monitor.addConnect( result );
  return result;
}
int FIX::SocketServer::add ( int  port,
bool  reuse = false,
bool  noDelay = false,
int  sendBufSize = 0,
int  rcvBufSize = 0 
) throw ( SocketException& )

Definition at line 97 of file SocketServer.cpp.

References FIX::socket_createAcceptor(), and FIX::socket_setsockopt().

{
  if( m_portToInfo.find(port) != m_portToInfo.end() )
    return m_portToInfo[port].m_socket;

  int socket = socket_createAcceptor( port, reuse );
  if( socket < 0 )
    throw SocketException();
  if( noDelay )
    socket_setsockopt( socket, TCP_NODELAY );
  if( sendBufSize )
    socket_setsockopt( socket, SO_SNDBUF, sendBufSize );
  if( rcvBufSize )
    socket_setsockopt( socket, SO_RCVBUF, rcvBufSize );
  m_monitor.addRead( socket );

  SocketInfo info( socket, port, noDelay, sendBufSize, rcvBufSize );
  m_socketToInfo[socket] = info;
  m_portToInfo[port] = info;
  return socket;
}
bool FIX::SocketServer::block ( Strategy strategy,
bool  poll = 0,
double  timeout = 0.0 
)

Definition at line 148 of file SocketServer.cpp.

References FIX::SocketMonitor::block(), m_monitor, m_socketToInfo, and FIX::socket_isValid().

Referenced by FIX::HttpServer::onPoll(), FIX::SocketAcceptor::onPoll(), FIX::HttpServer::onStart(), and FIX::SocketAcceptor::onStart().

{
  std::set<int> sockets;
  SocketToInfo::iterator i = m_socketToInfo.begin();
  for( ; i != m_socketToInfo.end(); ++i )
  {
    if( !socket_isValid(i->first) )
      return false;
    sockets.insert( i->first );
  }

  ServerWrapper wrapper( sockets, *this, strategy );
  m_monitor.block( wrapper, poll, timeout );
  return true;
}

Definition at line 137 of file SocketServer.cpp.

References m_socketToInfo, FIX::socket_close(), and FIX::socket_invalidate().

Referenced by FIX::HttpServer::onStart(), and FIX::SocketAcceptor::onStart().

{
  SocketToInfo::iterator i = m_socketToInfo.begin();
  for( ; i != m_socketToInfo.end(); ++i )
  {
    int s = i->first;
    socket_close( s );
    socket_invalidate( s );
  }
}

Definition at line 69 of file SocketServer.h.

References m_monitor, and FIX::SocketMonitor::numSockets().

{ return m_monitor.numSockets() - 1; }

Definition at line 171 of file SocketServer.cpp.

References m_portToInfo.

{
  SocketToInfo::iterator find = m_portToInfo.find( port );
  if( find == m_portToInfo.end() ) return 0;
  return find->second.m_socket;
}
int FIX::SocketServer::socketToPort ( int  socket)

Definition at line 164 of file SocketServer.cpp.

References m_socketToInfo.

Referenced by FIX::SocketAcceptor::onConnect().

{
  SocketToInfo::iterator find = m_socketToInfo.find( socket );
  if( find == m_socketToInfo.end() ) return 0;
  return find->second.m_port;
}

Member Data Documentation

Definition at line 83 of file SocketServer.h.

Referenced by accept(), block(), getMonitor(), and numConnections().

Definition at line 82 of file SocketServer.h.

Referenced by portToSocket().

Definition at line 81 of file SocketServer.h.

Referenced by accept(), block(), close(), and socketToPort().


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

Generated on Mon Jun 23 2014 23:49:40 for QuickFIX by doxygen 1.7.6.1 written by Dimitri van Heesch, © 1997-2001