C12Adapter Opensource C++ Interface
MStreamSocketUdp Class Reference

UDP datagram socket. More...

Inheritance diagram for MStreamSocketUdp:

Public Types

enum  { MAXIMUM_DATAGRAM_SIZE = 1500 }
 
- Public Types inherited from MStreamSocketBase
typedef int SocketHandleType
 
- Public Types inherited from MStream
enum  OpenFlags {
  FlagReadOnly = 0x0001,
  FlagWriteOnly = 0x0002,
  FlagReadWrite = 0x0003,
  FlagText = 0x00010,
  FlagBuffered = 0x0020
}
 Flags that set modes of stream manipulation. More...
 

Public Member Functions

 MStreamSocketUdp (SocketHandleType socketHandle=InvalidSocket)
 Constructor that creates socket based on existing socket handle. More...
 
virtual ~MStreamSocketUdp ()
 Destructor, destroys the socket object and never throws an exception. More...
 
virtual MStdString GetName () const
 Return a representative name of a socket stream. More...
 
virtual MStdString GetPeerSocketName () const
 Get the IP address for the peer socket. More...
 
virtual unsigned GetPeerSocketPort () const
 Get the port for the peer socket. More...
 
void Connect (unsigned port, const MStdString &address)
 Create client socket that connects to the server. More...
 
virtual void ClearInputBuffer ()
 Clear the input buffer by reading all the available data from the socket, if any are there. More...
 
virtual unsigned GetBytesReadyToRead () const
 The number of bytes in the receive buffer that can be read immediately. More...
 
unsigned RecvFrom (char *buffer, unsigned length, int flags, sockaddr *addr, socklen_t *addrLength)
 Analog of the standard socket datagram function recvfrom. More...
 
unsigned SendTo (const char *buffer, unsigned length, int flags, const sockaddr *addr, socklen_t addrLength)
 Send the buffer as the socket datagram, standard socket function sendto. More...
 
unsigned Recv (char *buffer, unsigned length, int flags)
 Analog of the standard socket function recv, uses internal address. More...
 
unsigned Send (const char *buffer, unsigned length, int flags)
 Send the buffer through the socket datagram, uses the internal address. More...
 
void Swap (MStreamSocketUdp &other)
 Swap this UDP socket and the given socket by exchanging their handles and other properties. More...
 
- Public Member Functions inherited from MStreamSocketBase
MStdString GetLocalSocketName () const
 Get the local name for this socket. More...
 
unsigned GetLocalSocketPort () const
 Get the local port for a socket. More...
 
void Bind (unsigned port, const MStdString &address=MVariant::s_emptyString)
 Bind a server socket. More...
 
bool WaitToReceive (unsigned timeout=(unsigned) TimeoutInfinite) const
 Waits the time given in milliseconds for the input data to arrive. More...
 
bool WaitToSend (unsigned timeout=(unsigned) TimeoutInfinite) const
 Waits the time given in milliseconds for the output buffer to become not full. More...
 
bool IsInputBufferEmpty () const
 Whether the input buffer has any data. More...
 
int GetSockOpt (int level, int option)
 Get socket option as integer, access to the standard socket call. More...
 
MByteString GetSockOptBytes (int level, int option, unsigned bufferSize)
 Get socket option as byte string, access to the standard socket call. More...
 
void SetSockOpt (int level, int option, const MVariant &value)
 Set socket option, access to the standard socket call. More...
 
SocketHandleType GetSocketHandle () const
 
void SetSocketHandle (SocketHandleType)
 
unsigned GetReceiveTimeout () const
 
void SetReceiveTimeout (unsigned milliseconds)
 
- Public Member Functions inherited from MStream
virtual ~MStream ()
 Closes the stream and destroys the object. More...
 
bool IsOpen () const
 Whether the stream object is successfully open. More...
 
unsigned GetFlags () const
 Return flags associated with stream. More...
 
MByteString Read (unsigned count)
 Reads a byte string of a given length from the stream. More...
 
MByteString ReadAvailable (unsigned count)
 Reads a byte string up to a given length from the stream. More...
 
MByteString ReadAll ()
 Reads all bytes available in stream. More...
 
void ReadBytes (char *buffer, unsigned count)
 Reads a byte buffer of a given length from the stream. More...
 
unsigned ReadAvailableBytes (char *buffer, unsigned count)
 Reads a byte buffer up to a given length from the stream. More...
 
MVariant ReadLine ()
 Read one line from text file. More...
 
bool ReadOneLine (MStdString &line)
 Read one line from text file, return false at end of file. More...
 
MStdStringVector ReadAllLines ()
 Read all lines from text file. More...
 
void Skip (unsigned count)
 Skips over and discards specified number of bytes of data from this stream. More...
 
void WriteByte (Muint8 byte)
 Writes a byte to the current position in the stream and advances the position by one byte. More...
 
void WriteChar (char c)
 Writes a char to the current position in the stream and advances the position by one byte. More...
 
void Write (const MByteString &bytes)
 Writes a given byte string to the current position in the stream and advances the position. More...
 
void WriteBytes (const char *bytes, unsigned count)
 Writes a given byte buffer to the current position in the stream and advances the position. More...
 
void WriteChars (const char *chars)
 Writes a given zero terminated character string to the current position in the stream and advances the position. More...
 
void WriteLine (const MStdString &str)
 Write a line into file. More...
 
void WriteAllLines (const MStdStringVector &lines)
 Write given lines into file. More...
 
void WriteFormat (MConstChars format,...)
 Write a formatted string into a file. More...
 
void WriteFormatVA (MConstChars format, va_list args)
 Write a formatted string into a file using va_list. More...
 
void Flush ()
 Causes any buffered data to be written into stream. More...
 
void Close ()
 Flushes and closes the current stream and releases any resources. More...
 
MStdString GetKey () const
 
void SetKey (const MStdString &)
 
unsigned GetPosition () const
 
void SetPosition (unsigned)
 
unsigned GetSize () const
 
void SetSize (unsigned)
 
MVariant ReadByte ()
 
- Public Member Functions inherited from MObject
virtual ~MObject ()
 Object destructor.
 
virtual const MClassGetClass () const =0
 Get the final class of the object. More...
 
virtual unsigned GetEmbeddedSizeof () const
 For embedded object types, return the size of the class. More...
 
bool IsEmbeddedObject () const
 Tell if the object is of embedded kind. More...
 
SHOW_INTERNAL MVariant Call (const MStdString &name, const MVariant &params)
 Call the object service with parameters, given as variant. More...
 
MVariant Call0 (const MStdString &name)
 Call the object service with no parameters. More...
 
MVariant Call1 (const MStdString &name, const MVariant &p1)
 Call the object service with one parameter. More...
 
MVariant Call2 (const MStdString &name, const MVariant &p1, const MVariant &p2)
 Call the object service with two parameter. More...
 
MVariant Call3 (const MStdString &name, const MVariant &p1, const MVariant &p2, const MVariant &p3)
 Call the object service with three parameter. More...
 
MVariant Call4 (const MStdString &name, const MVariant &p1, const MVariant &p2, const MVariant &p3, const MVariant &p4)
 Call the object service with four parameter. More...
 
MVariant Call5 (const MStdString &name, const MVariant &p1, const MVariant &p2, const MVariant &p3, const MVariant &p4, const MVariant &p5)
 Call the object service with five parameter. More...
 
MVariant Call6 (const MStdString &name, const MVariant &p1, const MVariant &p2, const MVariant &p3, const MVariant &p4, const MVariant &p5, const MVariant &p6)
 Call the object service with six parameter. More...
 
virtual MVariant CallV (const MStdString &name, const MVariant::VariantVector &params)
 Call the object service with parameters, given as variant vector. More...
 
virtual bool IsPropertyPresent (const MStdString &name) const
 Tell if the property with the given name exists.
 
virtual bool IsServicePresent (const MStdString &name) const
 Tell if the service with the given name exists.
 
virtual MVariant GetProperty (const MStdString &name) const
 Get the property value using name of the property. More...
 
virtual void SetProperty (const MStdString &name, const MVariant &value)
 Set the property using name of the property, and value. More...
 
virtual MStdStringVector GetAllPropertyNames () const
 Return the list of publicly available properties, persistent or not. More...
 
virtual MStdStringVector GetAllPersistentPropertyNames () const
 Return the list of persistent properties. More...
 
virtual void SetPersistentPropertiesToDefault ()
 Set the persistent properties of the object to their default values. More...
 
virtual MVariant GetPersistentPropertyDefaultValue (const MStdString &name) const
 Get the default value of persistent property with the name given. More...
 
virtual void SetPersistentPropertyToDefault (const MStdString &name)
 Set the persistent property with the name given to default value. More...
 
virtual const char * GetType () const
 Get the name of the type for the object (could be the same as class name).
 
virtual void SetType (const MStdString &)
 Intentionally, it will set the name of the type for the object, but the service will not allow setting the name to anything other than the current name. More...
 
virtual void Validate ()
 Validate internal structures of the object. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from MStreamSocketBase
static MStdString GetLocalName ()
 Returns the standard host name for the local machine. More...
 
static MStdString GetLocalAddress ()
 Returns the host address for the local machine. More...
 
static MByteString AddressToBinary (const MStdString &addr)
 Convert a string with IPv4 or IPv6 IP address into a binary form. More...
 
static MStdString BinaryToAddress (const MByteString &addr)
 Convert a binary form of IPv4 or IPv6 address into a string. More...
 
static bool IsAddressLocalIPv4 (const MStdString &address)
 True if the given string represents an IPv4 address. More...
 
static bool IsAddressLocalIPv6 (const MStdString &address)
 True if the given string represents an IPv6 address. More...
 
- Static Public Member Functions inherited from MObject
static const MClassGetStaticClass ()
 Get the declared class of this particular object. More...
 
static bool IsClassPresent (const MStdString &name)
 Tells if the given class name is available. More...
 
- Static Public Attributes inherited from MStreamSocketBase
static const SocketHandleType InvalidSocket = (SocketHandleType)(~0)
 Value of socket handle that corresponds to uninitialized or invalid socket.
 
static const int SocketErrorStatus = -1
 Return value that corresponds to uninitialized or invalid socket.
 
static const unsigned TimeoutInfinite = (unsigned)-1
 Timeout that represents infinity. More...
 
static const unsigned TimeoutDefault = 60000
 Default socket read timeout in milliseconds. More...
 
- Static Public Attributes inherited from MObject
static const MClass s_class
 Class of MObject.
 
- Protected Member Functions inherited from MStreamSocketBase
 MStreamSocketBase (SocketHandleType socketHandle=InvalidSocket)
 Constructor that creates socket based on the existing socket handle. More...
 
virtual ~MStreamSocketBase ()
 Destructor, destroys the socket object and never throws an exception. More...
 
- Protected Member Functions inherited from MStream
 MStream ()
 Default constructor, called from children of stream.
 
- Protected Member Functions inherited from MObject
 MObject ()
 Object constructor, protected as the class is abstract.
 
void DoSetPersistentPropertiesToDefault (const MClass *staticClass)
 Set the persistent properties to their default values for one object provided the class for that object. More...
 

Detailed Description

UDP datagram socket.

The services below can throw MESocketError in the event of an erroneous socket operation.

Member Enumeration Documentation

anonymous enum
Enumerator
MAXIMUM_DATAGRAM_SIZE 

Maximum practical size of UDP datagram.

The theoretical UDP datagram size is 65,535 according to https://en.wikipedia.org/wiki/User_Datagram_Protocol. However, such size is not practical as UDP size is typically selected to be smaller than MTU (maximum transfed unit of the media). According to http://stackoverflow.com/questions/1098897/what-is-the-largest-safe-udp-packet-size-on-the-internet the value 1500 is a good practical maximum, while in reality the size is even smaller to make sure the packet is never reassembled.

Constructor & Destructor Documentation

MStreamSocketUdp::MStreamSocketUdp ( SocketHandleType  socketHandle = InvalidSocket)
explicit

Constructor that creates socket based on existing socket handle.

This is a C++ only method that is convenient for cases when the socket is open by any means other than the socket stream object.

Parameters
socketHandleHandle to use by the socket. When handle is an invalid socket value, or not present, the socket will not be opened.
virtual MStreamSocketUdp::~MStreamSocketUdp ( )
virtual

Destructor, destroys the socket object and never throws an exception.

Use Close if there is a need to report any socket related exceptions.

Member Function Documentation

virtual void MStreamSocketUdp::ClearInputBuffer ( )
virtual

Clear the input buffer by reading all the available data from the socket, if any are there.

Precondition
The socket is alive, other read-related errors possible.

Implements MStreamSocketBase.

void MStreamSocketUdp::Connect ( unsigned  port,
const MStdString address 
)

Create client socket that connects to the server.

Parameters
portPort to which to connect.
addressIP address or a DNS name of the server to which the connection has to be made.
See also
MStreamSocket::ConnectWithProxy - Connect to a socket through SOCKS proxy.
virtual unsigned MStreamSocketUdp::GetBytesReadyToRead ( ) const
virtual

The number of bytes in the receive buffer that can be read immediately.

Returns the number of bytes ready to be read from socket.

Precondition
The connection is alive, otherwise the connection-specific exception is thrown.
See also
MStreamSocketBase::WaitToReceive - Waits the specified time for the input data to arrive.

Implements MStreamSocketBase.

virtual MStdString MStreamSocketUdp::GetName ( ) const
virtual

Return a representative name of a socket stream.

This method overwrites the parent implementation and gives descriptive information about the socket. For example, it can return client host name or IP address, and its port number. The particular information is not guaranteed to have the same format.

Implements MStream.

virtual MStdString MStreamSocketUdp::GetPeerSocketName ( ) const
virtual

Get the IP address for the peer socket.

The IP address returned has text representation, such as "10.0.0.120".

Precondition
Socket has to be initialized, and the connection is active, otherwise a system error is thrown.

Implements MStreamSocketBase.

virtual unsigned MStreamSocketUdp::GetPeerSocketPort ( ) const
virtual

Get the port for the peer socket.

Precondition
Socket has to be initialized, and the connection is active, otherwise a system error is thrown.

Implements MStreamSocketBase.

unsigned MStreamSocketUdp::Recv ( char *  buffer,
unsigned  length,
int  flags 
)

Analog of the standard socket function recv, uses internal address.

Parameters
bufferBuffer into which to receive the data.
lengthLength of the buffer or how many bytes to read.
flagsStandard recv flags.
Returns
How many bytes are received into buffer.
Precondition
Socket is bound or connected.
See also
RecvFrom - Complete UDP version of this call.
unsigned MStreamSocketUdp::RecvFrom ( char *  buffer,
unsigned  length,
int  flags,
sockaddr *  addr,
socklen_t *  addrLength 
)

Analog of the standard socket datagram function recvfrom.

Receive a datagram currently available in the socket.

Parameters
bufferBuffer into which to receive the data.
lengthLength of the buffer or how many bytes to read.
flagsStandard recv flags.
addrAddress information, big enough to hold any address. This is typically sockaddr_storage.
addrLengthReturned length of the address information.
Returns
How many bytes are received into buffer.
Precondition
Socket is bound or connected.
See also
Recv - Variant of this call that uses an internal holder for address.
unsigned MStreamSocketUdp::Send ( const char *  buffer,
unsigned  length,
int  flags 
)

Send the buffer through the socket datagram, uses the internal address.

Parameters
bufferBuffer, which shall be written to socket.
lengthLength of the buffer to write.
flagsStandard send flags.
Returns
How many bytes are sent.
Precondition
Socket is bound or connected.
See also
SendTo - Complete UDP version of this call.
unsigned MStreamSocketUdp::SendTo ( const char *  buffer,
unsigned  length,
int  flags,
const sockaddr *  addr,
socklen_t  addrLength 
)

Send the buffer as the socket datagram, standard socket function sendto.

Parameters
bufferBuffer, which shall be written to socket.
lengthLength of the buffer to write.
flagsStandard send flags.
addrAddress information, big enough to hold any address. This is typically sockaddr_storage.
addrLengthReturned length of the address information.
Returns
How many bytes are sent.
Precondition
Socket is bound or connected.
void MStreamSocketUdp::Swap ( MStreamSocketUdp other)

Swap this UDP socket and the given socket by exchanging their handles and other properties.

After the successful completion, this socket and other socket will be exchanged.