nidas  v1.2-1520
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
nidas::core::McSocket Class Reference

Implementation of an IOChannel, using nidas::util::McSocket<nidas::util::Socket> to establish a TCP connection. More...

#include <McSocket.h>

Inheritance diagram for nidas::core::McSocket:
Inheritance graph
[legend]

Classes

class  MyMcSocket
 

Public Member Functions

 McSocket ()
 Constructor. More...
 
 ~McSocket ()
 
McSocketclone () const
 Derived classes must provide clone. More...
 
void setRequestType (enum McSocketRequest val)
 
enum McSocketRequest getRequestType () const
 
bool isRequester () const
 Does this McSocket request connections, or does it listen for incoming connections. More...
 
void setRequester (bool val)
 
void setName (const std::string &val)
 
const std::string & getName () const
 
void requestConnection (IOChannelRequester *service) throw (nidas::util::IOException)
 After the IOChannel is configured, a user of IOChannel calls requestConnection to get things started. More...
 
IOChannelconnect () throw (nidas::util::IOException)
 Establish a connection. More...
 
virtual void connected (nidas::util::Socket *sock, const nidas::util::Inet4PacketInfoX &pktinfo)
 
virtual bool isNewInput () const
 Some IOChannels, namely FileSet, which opens successive files, need to indicate when a read is from the start of a new file. More...
 
void setKeepAliveIdleSecs (int val) throw (nidas::util::IOException)
 
int getKeepAliveIdleSecs () const throw (nidas::util::IOException)
 
void setNonBlocking (bool val) throw (nidas::util::IOException)
 Do setNonBlocking(val) on underlying socket. More...
 
bool isNonBlocking () const throw (nidas::util::IOException)
 Return isNonBlocking() of underlying socket. More...
 
size_t read (void *, size_t) throw (nidas::util::IOException)
 A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection. More...
 
size_t write (const void *, size_t) throw (nidas::util::IOException)
 A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection. More...
 
size_t write (const struct iovec *, int) throw (nidas::util::IOException)
 A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection. More...
 
void close () throw (nidas::util::IOException)
 
int getFd () const
 
void fromDOMElement (const xercesc::DOMElement *) throw (nidas::util::InvalidParameterException)
 Initialize myself from a xercesc::DOMElement. More...
 
void setInet4McastSocketAddress (const nidas::util::Inet4SocketAddress &val)
 
const
nidas::util::Inet4SocketAddress
getInet4McastSocketAddress () const
 
virtual int getReconnectDelaySecs () const
 
virtual const ConnectionInfogetConnectionInfo () const
 What is the IP address of the host at the other end of the connection. More...
 
virtual void setConnectionInfo (const ConnectionInfo &val)
 
virtual size_t getBufferSize () const throw ()
 Return suggested buffer length. More...
 
virtual void flush () throw (nidas::util::IOException)
 Default flush implementation does nothing. More...
 
virtual dsm_time_t createFile (dsm_time_t t, bool exact)
 Request that an IOChannel open a new file, with a name based on a time. More...
 
virtual bool writeNidasHeader () const
 Should the NIDAS header be written to this IOChannel? NIDAS headers are not written to DatagramSockets, because there is no guarantee they will get there. More...
 
virtual void setDSMConfig (const DSMConfig *val)
 What DSM is this IOChannel connected to? More...
 
virtual const DSMConfiggetDSMConfig () const
 What DSM is this IOChannel connected to? May be NULL. More...
 
virtual xercesc::DOMElement * toDOMParent (xercesc::DOMElement *parent, bool complete) const throw (xercesc::DOMException)
 Create a DOMElement and append it to the parent. More...
 
virtual xercesc::DOMElement * toDOMElement (xercesc::DOMElement *node, bool complete) const throw (xercesc::DOMException)
 Add my content into a DOMElement. More...
 

Static Public Member Functions

static IOChannelcreateIOChannel (const xercesc::DOMElement *node) throw (nidas::util::InvalidParameterException)
 
static const XMLCh * getNamespaceURI ()
 

Protected Member Functions

 McSocket (const McSocket &)
 Copy constructor. More...
 

Protected Attributes

IOChannelRequester_iochanRequester
 
MyMcSocket _mcsocket
 

Private Member Functions

McSocketoperator= (const McSocket &)
 No assignment. More...
 

Private Attributes

std::string _name
 
bool _amRequester
 
bool _firstRead
 
bool _newInput
 
int _keepAliveIdleSecs
 
bool _nonBlocking
 

Detailed Description

Implementation of an IOChannel, using nidas::util::McSocket<nidas::util::Socket> to establish a TCP connection.

Constructor & Destructor Documentation

McSocket::McSocket ( )

Constructor.

References setName().

Referenced by clone().

nidas::core::McSocket::~McSocket ( )
inline
McSocket::McSocket ( const McSocket x)
protected

Copy constructor.

Should only be called before nidas::util::Socket is connected.

Member Function Documentation

McSocket * McSocket::clone ( ) const
virtual

Derived classes must provide clone.

Implements nidas::core::IOChannel.

References McSocket().

void McSocket::close ( )
throw (nidas::util::IOException
)
virtual
IOChannel * McSocket::connect ( )
throw (nidas::util::IOException
)
virtual
void McSocket::connected ( nidas::util::Socket sock,
const nidas::util::Inet4PacketInfoX pktinfo 
)
virtual
virtual dsm_time_t nidas::core::IOChannel::createFile ( dsm_time_t  t,
bool  exact 
)
inlinevirtualinherited

Request that an IOChannel open a new file, with a name based on a time.

This should be implemented by derived classes which write to disk files. Other derived classes (e.g. sockets) can just use this default implementation - basically ignoring the request.

Parameters
tTime to use when creating file name.
exactUse exact time when creating file name, else the time is adjusted to an even time interval.

Reimplemented in nidas::core::FileSet.

Referenced by nidas::core::IOStream::createFile().

IOChannel * IOChannel::createIOChannel ( const xercesc::DOMElement *  node)
throw (nidas::util::InvalidParameterException
)
staticinherited
virtual void nidas::core::IOChannel::flush ( )
throw (nidas::util::IOException
)
inlinevirtualinherited
void McSocket::fromDOMElement ( const xercesc::DOMElement *  )
throw (nidas::util::InvalidParameterException
)
virtual
virtual size_t nidas::core::IOChannel::getBufferSize ( ) const
throw (
)
inlinevirtualinherited
virtual const ConnectionInfo& nidas::core::IOChannel::getConnectionInfo ( ) const
inlinevirtualinherited

What is the IP address of the host at the other end of the connection.

If this IOChannel is not a socket then return INADDR_ANY, using the default constructor of an Inet4Address. Socket subclasses should override this.

Referenced by nidas::dynld::SampleInputStream::setIOChannel().

virtual const DSMConfig* nidas::core::IOChannel::getDSMConfig ( ) const
inlinevirtualinherited

What DSM is this IOChannel connected to? May be NULL.

Referenced by nidas::core::FileSet::setDir(), and nidas::core::FileSet::setFileName().

int McSocket::getFd ( ) const
virtual
const nidas::util::Inet4SocketAddress& nidas::core::McSocket::getInet4McastSocketAddress ( ) const
inline
int nidas::core::McSocket::getKeepAliveIdleSecs ( ) const
throw (nidas::util::IOException
)
inline

References _keepAliveIdleSecs.

const std::string& nidas::core::McSocket::getName ( ) const
inlinevirtual

Implements nidas::core::IOChannel.

References _name.

static const XMLCh* nidas::core::DOMable::getNamespaceURI ( )
inlinestaticinherited
virtual int nidas::core::IOChannel::getReconnectDelaySecs ( ) const
inlinevirtualinherited
enum McSocketRequest nidas::core::McSocket::getRequestType ( ) const
inlinevirtual
virtual bool nidas::core::McSocket::isNewInput ( ) const
inlinevirtual

Some IOChannels, namely FileSet, which opens successive files, need to indicate when a read is from the start of a new file.

This method is used by code which may need to do special things at the beginning of a file, like read a SampleInputHeader.

Reimplemented from nidas::core::IOChannel.

References _newInput.

bool nidas::core::McSocket::isNonBlocking ( ) const
throw (nidas::util::IOException
)
inlinevirtual

Return isNonBlocking() of underlying socket.

Implements nidas::core::IOChannel.

References _nonBlocking.

Referenced by connect(), and connected().

bool nidas::core::McSocket::isRequester ( ) const
inline

Does this McSocket request connections, or does it listen for incoming connections.

References _amRequester.

Referenced by connect().

McSocket& nidas::core::McSocket::operator= ( const McSocket )
private

No assignment.

size_t nidas::core::McSocket::read ( void *  ,
size_t   
)
throw (nidas::util::IOException
)
inlinevirtual

A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection.

The returned IOChannel should be used to read/write. Calling this method will fail with an assert.

Implements nidas::core::IOChannel.

void McSocket::requestConnection ( IOChannelRequester )
throw (nidas::util::IOException
)
virtual

After the IOChannel is configured, a user of IOChannel calls requestConnection to get things started.

It is like opening a device, but in the case of server sockets, it just starts a thread to wait on connections. Only when the IOChannelRequester::connected() method is called back is the channel actually open and ready for IO. The IOChannel* returned by IOChannelRequester::connected may be another instance of an IOChannel.

Implements nidas::core::IOChannel.

virtual void nidas::core::IOChannel::setConnectionInfo ( const ConnectionInfo val)
inlinevirtualinherited
virtual void nidas::core::IOChannel::setDSMConfig ( const DSMConfig val)
inlinevirtualinherited
void nidas::core::McSocket::setInet4McastSocketAddress ( const nidas::util::Inet4SocketAddress val)
inline
void nidas::core::McSocket::setKeepAliveIdleSecs ( int  val)
throw (nidas::util::IOException
)
inline

References _keepAliveIdleSecs.

void nidas::core::McSocket::setName ( const std::string &  val)
inlinevirtual

Implements nidas::core::IOChannel.

References _name.

Referenced by McSocket().

void nidas::core::McSocket::setNonBlocking ( bool  val)
throw (nidas::util::IOException
)
inlinevirtual

Do setNonBlocking(val) on underlying socket.

Implements nidas::core::IOChannel.

References _nonBlocking.

void nidas::core::McSocket::setRequester ( bool  val)
inline

References _amRequester.

void nidas::core::McSocket::setRequestType ( enum McSocketRequest  val)
inlinevirtual
xercesc::DOMElement * DOMable::toDOMElement ( xercesc::DOMElement *  node,
bool  complete 
) const
throw (xercesc::DOMException
)
virtualinherited
xercesc::DOMElement * DOMable::toDOMParent ( xercesc::DOMElement *  parent,
bool  complete 
) const
throw (xercesc::DOMException
)
virtualinherited
size_t nidas::core::McSocket::write ( const void *  ,
size_t   
)
throw (nidas::util::IOException
)
inlinevirtual

A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection.

The returned IOChannel should be used to read/write. Calling this method will fail with an assert.

Implements nidas::core::IOChannel.

size_t nidas::core::McSocket::write ( const struct iovec *  ,
int   
)
throw (nidas::util::IOException
)
inlinevirtual

A McSocket shouldn't be used to do any actual reads or writes, it just sets up the connection.

The returned IOChannel should be used to read/write. Calling this method will fail with an assert.

Implements nidas::core::IOChannel.

virtual bool nidas::core::IOChannel::writeNidasHeader ( ) const
inlinevirtualinherited

Should the NIDAS header be written to this IOChannel? NIDAS headers are not written to DatagramSockets, because there is no guarantee they will get there.

Reimplemented in nidas::core::DatagramSocket.

Referenced by nidas::dynld::SampleInputStream::setIOChannel().

Member Data Documentation

bool nidas::core::McSocket::_amRequester
private

Referenced by isRequester(), and setRequester().

bool nidas::core::McSocket::_firstRead
private
IOChannelRequester* nidas::core::McSocket::_iochanRequester
protected

Referenced by connected().

int nidas::core::McSocket::_keepAliveIdleSecs
private
MyMcSocket nidas::core::McSocket::_mcsocket
protected
std::string nidas::core::McSocket::_name
private

Referenced by getName(), and setName().

bool nidas::core::McSocket::_newInput
private

Referenced by isNewInput().

bool nidas::core::McSocket::_nonBlocking
private

Referenced by isNonBlocking(), and setNonBlocking().


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