TCPSocketDataIO Class Reference

Data I/O to and from a TCP socket! More...

#include <TCPSocketDataIO.h>

Inheritance diagram for TCPSocketDataIO:

Inheritance graph
[legend]
List of all members.

Public Types

enum  { IO_SEEK_SET = 0, IO_SEEK_CUR, IO_SEEK_END, NUM_IO_SEEKS }
 Values to pass in to DataIO::Seek()'s second parameter. More...

Public Member Functions

 TCPSocketDataIO (const SocketRef &sock, bool blocking)
 Constructor.
virtual ~TCPSocketDataIO ()
 Destructor.
virtual int32 Read (void *buffer, uint32 size)
 Tries to place (size) bytes of new data into (buffer).
virtual int32 Write (const void *buffer, uint32 size)
 Takes (size) bytes from (buffer) and pushes them in to the outgoing I/O stream.
virtual status_t Seek (int64, int)
 This method implementation always returns B_ERROR, because you can't seek on a socket!
virtual int64 GetPosition () const
 Always returns -1, since a socket has no position to speak of.
virtual uint64 GetOutputStallLimit () const
 Stall limit for TCP streams is 3*60*1000000 microseconds (3 minutes) by default.
void SetOutputStallLimit (uint64 limit)
 Set a new output stall time limit.
virtual void FlushOutput ()
 Flushes the output buffer by turning off Nagle's Algorithm and then turning it back on again.
virtual void Shutdown ()
 Closes our socket connection.
virtual const SocketRefGetSelectSocket () const
 Returns our socket descriptor.
status_t SetBlockingIOEnabled (bool blocking)
 Enables or diables blocking I/O on this socket.
status_t SetNaglesAlgorithmEnabled (bool enabled)
 Turns Nagle's algorithm (output packet buffering/coalescing) on or off.
bool IsBlockingIOEnabled () const
 Returns true iff our socket is set to use blocking I/O (as specified in the constructor or in our SetBlockingIOEnabled() method).
bool IsNaglesAlgorithmEnabled () const
 Returns true iff our socket has Nagle's algorithm enabled (as specified in our SetNaglesAlgorithmEnabled() method.
virtual status_t GetReadByteTimeStamp (int32 whichByte, uint64 &retStamp) const
 Optional interface for returning information on when a given byte returned by the previous Read() call was received.
virtual bool HasBufferedOutput () const
 Optional: If your DataIO subclass is holding buffered data that it wants to output as soon as possible but hasn't been able to yet, then override this method to return true, and that will cause FlushBufferedOutput() to be called ASAP.
virtual void WriteBufferedOutput ()
 Optional: If this DataIO is holding any buffered output data, this method should be implemented to Write() as much of that data as possible.
uint32 WriteFully (const void *buffer, uint32 size)
 Convenience method: Calls Write() in a loop until the entire buffer is written, or until an error occurs.
uint32 ReadFully (void *buffer, uint32 size)
 Convenience method: Calls Read() in a loop until the entire buffer is written, or until an error occurs.
virtual int64 GetLength ()
 Convenience method: Determines the length of this DataIO stream by Seek()'ing to the end of the stream, recording the current seek position, and then Seek()'ing back to the previous position in the stream.
void IncrementRefCount () const
 Increments the counter and returns true iff the new value is zero.
bool DecrementRefCount () const
 Decrements the counter and returns true iff the new value is zero.
void SetManager (AbstractObjectManager *manager)
 Sets the recycle-pointer for this object.
AbstractObjectManagerGetManager () const
 Returns this object's current recyler pointer.
uint32 GetRefCount () const
 Returns this object's current reference count.

Detailed Description

Data I/O to and from a TCP socket!

Definition at line 20 of file TCPSocketDataIO.h.


Member Enumeration Documentation

anonymous enum [inherited]

Values to pass in to DataIO::Seek()'s second parameter.

Enumerator:
IO_SEEK_SET  Tells Seek that its value specifies bytes-after-beginning-of-stream.
IO_SEEK_CUR  Tells Seek that its value specifies bytes-after-current-stream-position.
IO_SEEK_END  Tells Seek that its value specifies bytes-after-end-of-stream (you'll usually specify a non-positive seek value with this).
NUM_IO_SEEKS  A guard value.

Definition at line 15 of file DataIO.h.


Constructor & Destructor Documentation

TCPSocketDataIO::TCPSocketDataIO ( const SocketRef sock,
bool  blocking 
) [inline]

Constructor.

Parameters:
sock The SocketRef we should use for our I/O.
blocking specifies whether to use blocking or non-blocking socket I/O. If you will be using this object with a AbstractMessageIOGateway, and/or select(), then it's usually better to set blocking to false.

Definition at line 30 of file TCPSocketDataIO.h.

References SetBlockingIOEnabled().

virtual TCPSocketDataIO::~TCPSocketDataIO (  )  [inline, virtual]

Destructor.

Closes the socket descriptor, if necessary.

Definition at line 38 of file TCPSocketDataIO.h.

References Shutdown().


Member Function Documentation

virtual int32 TCPSocketDataIO::Read ( void *  buffer,
uint32  size 
) [inline, virtual]

Tries to place (size) bytes of new data into (buffer).

Returns the actual number of bytes placed, or a negative value if there was an error.

Parameters:
buffer Buffer to write the bytes into
size Number of bytes in the buffer.
Returns:
Number of bytes read, or -1 on error.

Implements DataIO.

Reimplemented in SSLSocketDataIO.

Definition at line 43 of file TCPSocketDataIO.h.

virtual int32 TCPSocketDataIO::Write ( const void *  buffer,
uint32  size 
) [inline, virtual]

Takes (size) bytes from (buffer) and pushes them in to the outgoing I/O stream.

Returns the actual number of bytes read from (buffer) and pushed, or a negative value if there was an error.

Parameters:
buffer Buffer to read the bytes from.
size Number of bytes in the buffer.
Returns:
Number of bytes written, or -1 on error.

Implements DataIO.

Reimplemented in SSLSocketDataIO.

Definition at line 44 of file TCPSocketDataIO.h.

virtual uint64 TCPSocketDataIO::GetOutputStallLimit (  )  const [inline, virtual]

Stall limit for TCP streams is 3*60*1000000 microseconds (3 minutes) by default.

Or change it by calling SetOutputStallLimit().

Reimplemented from DataIO.

Definition at line 58 of file TCPSocketDataIO.h.

void TCPSocketDataIO::SetOutputStallLimit ( uint64  limit  )  [inline]

Set a new output stall time limit.

Set to MUSCLE_TIME_NEVER to disable stall limiting.

Definition at line 61 of file TCPSocketDataIO.h.

virtual void TCPSocketDataIO::FlushOutput (  )  [inline, virtual]

Flushes the output buffer by turning off Nagle's Algorithm and then turning it back on again.

If Nagle's Algorithm is disabled, then this call is a no-op (since there is never anything to flush)

Implements DataIO.

Definition at line 67 of file TCPSocketDataIO.h.

status_t TCPSocketDataIO::SetBlockingIOEnabled ( bool  blocking  )  [inline]

Enables or diables blocking I/O on this socket.

If this object is to be used by an AbstractMessageIOGateway, then non-blocking I/O is usually better to use.

Parameters:
blocking If true, socket is set to blocking I/O mode. Otherwise, non-blocking I/O.
Returns:
B_NO_ERROR on success, B_ERROR on error.

Definition at line 94 of file TCPSocketDataIO.h.

Referenced by TCPSocketDataIO().

status_t TCPSocketDataIO::SetNaglesAlgorithmEnabled ( bool  enabled  )  [inline]

Turns Nagle's algorithm (output packet buffering/coalescing) on or off.

Parameters:
enabled If true, data will be held momentarily before sending, to allow for bigger packets. If false, each Write() call will cause a new packet to be sent immediately.
Returns:
B_NO_ERROR on success, B_ERROR on error.

Definition at line 107 of file TCPSocketDataIO.h.

bool TCPSocketDataIO::IsNaglesAlgorithmEnabled (  )  const [inline]

Returns true iff our socket has Nagle's algorithm enabled (as specified in our SetNaglesAlgorithmEnabled() method.

Default state is true.

Definition at line 122 of file TCPSocketDataIO.h.

virtual status_t DataIO::GetReadByteTimeStamp ( int32  whichByte,
uint64 &  retStamp 
) const [inline, virtual, inherited]

Optional interface for returning information on when a given byte returned by the previous Read() call was received.

Not implemented by default, and not implemented by any of the standard MUSCLE DataIO subclasses. (Used by an LCS dataIO class that needs precision timing)

Parameters:
whichByte Index of the byte in the previously returned read-buffer that you are interested in.
retStamp On success, this value is set to the timestamp of the byte.
Returns:
B_NO_ERROR if a timestamp was written into (retStamp), otherwise B_ERROR. Default implementation always returns B_ERROR.

Reimplemented in FailoverDataIO, MultiDataIO, and XorDataIO.

Definition at line 114 of file DataIO.h.

Referenced by MultiDataIO::GetReadByteTimeStamp(), and FailoverDataIO::GetReadByteTimeStamp().

virtual bool DataIO::HasBufferedOutput (  )  const [inline, virtual, inherited]

Optional: If your DataIO subclass is holding buffered data that it wants to output as soon as possible but hasn't been able to yet, then override this method to return true, and that will cause FlushBufferedOutput() to be called ASAP.

Default implementation always returns false.

Reimplemented in FailoverDataIO, MultiDataIO, PacketizedDataIO, and XorDataIO.

Definition at line 123 of file DataIO.h.

Referenced by FailoverDataIO::HasBufferedOutput().

virtual void DataIO::WriteBufferedOutput (  )  [inline, virtual, inherited]

Optional: If this DataIO is holding any buffered output data, this method should be implemented to Write() as much of that data as possible.

Default implementation is a no-op.

Reimplemented in FailoverDataIO, MultiDataIO, PacketizedDataIO, and XorDataIO.

Definition at line 130 of file DataIO.h.

Referenced by FailoverDataIO::WriteBufferedOutput().

uint32 DataIO::WriteFully ( const void *  buffer,
uint32  size 
) [inherited]

Convenience method: Calls Write() in a loop until the entire buffer is written, or until an error occurs.

This method should only be used in conjunction with blocking I/O; it will not work reliably with non-blocking I/O.

Parameters:
buffer Pointer to the first byte of the buffer to write data from.
size Number of bytes to write
Returns:
The number of bytes that were actually written. On success, This will be equal to (size). On failure, it will be a smaller value.

uint32 DataIO::ReadFully ( void *  buffer,
uint32  size 
) [inherited]

Convenience method: Calls Read() in a loop until the entire buffer is written, or until an error occurs.

This method should only be used in conjunction with blocking I/O; it will not work reliably with non-blocking I/O.

Parameters:
buffer Pointer to the first byte of the buffer to place the read data into.
size Number of bytes to read
Returns:
The number of bytes that were actually read. On success, This will be equal to (size). On failure, it will be a smaller value.

virtual int64 DataIO::GetLength (  )  [virtual, inherited]

Convenience method: Determines the length of this DataIO stream by Seek()'ing to the end of the stream, recording the current seek position, and then Seek()'ing back to the previous position in the stream.

Of course this only works with DataIOs that support seeking and have a fixed length.

Returns:
The total length of this DataIO in bytes, or -1 on error.

Reimplemented in PacketizedDataIO.

void RefCountable::IncrementRefCount (  )  const [inline, inherited]

Increments the counter and returns true iff the new value is zero.

Thread safe.

Definition at line 32 of file RefCount.h.

References AtomicCounter::AtomicIncrement().

bool RefCountable::DecrementRefCount (  )  const [inline, inherited]

Decrements the counter and returns true iff the new value is zero.

Thread safe.

Definition at line 35 of file RefCount.h.

References AtomicCounter::AtomicDecrement().

void RefCountable::SetManager ( AbstractObjectManager manager  )  [inline, inherited]

Sets the recycle-pointer for this object.

If set to non-NULL, this pointer is used by the ObjectPool class to recycle this object when it is no longer in use, so as to avoid the overhead of having to delete it and re-create it later on. The RefCountable class itself does nothing with this pointer. Default value is NULL.

Parameters:
manager Pointer to the new manager object to use, or NULL to use no manager.

Definition at line 44 of file RefCount.h.

uint32 RefCountable::GetRefCount (  )  const [inline, inherited]

Returns this object's current reference count.

Note that the value returned by this method is volatile in multithreaded environments, so it may already be wrong by the time it is returned. Be careful!

Definition at line 54 of file RefCount.h.

References AtomicCounter::GetCount().


The documentation for this class was generated from the following file:
Generated on Mon Apr 28 13:59:44 2008 for MUSCLE by  doxygen 1.5.1