Yate
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

Socket Class Reference

A generic socket class. More...

#include <yateclass.h>

Inheritance diagram for Socket:
Stream

List of all members.

Public Types

enum  TOS { LowDelay = IPTOS_LOWDELAY, MaxThroughput = IPTOS_THROUGHPUT, MaxReliability = IPTOS_RELIABILITY, MinCost = IPTOS_MINCOST }

Public Member Functions

 Socket ()
 Socket (SOCKET handle)
 Socket (int domain, int type, int protocol=0)
virtual ~Socket ()
bool create (int domain, int type, int protocol=0)
virtual bool terminate ()
void attach (SOCKET handle)
SOCKET detach ()
SOCKET handle () const
virtual bool canRetry () const
virtual bool valid () const
bool setOption (int level, int name, const void *value=0, socklen_t length=0)
bool getOption (int level, int name, void *buffer, socklen_t *length)
bool setTOS (int tos)
virtual bool setBlocking (bool block=true)
bool setReuse (bool reuse=true, bool exclusive=false)
bool setLinger (int seconds=-1)
bool bind (struct sockaddr *addr, socklen_t addrlen)
bool bind (const SocketAddr &addr)
bool listen (unsigned int backlog=0)
Socketaccept (struct sockaddr *addr=0, socklen_t *addrlen=0)
Socketaccept (SocketAddr &addr)
SOCKET acceptHandle (struct sockaddr *addr=0, socklen_t *addrlen=0)
bool canSelect () const
SocketpeelOff (unsigned int assoc)
SOCKET peelOffHandle (unsigned int assoc)
bool connect (struct sockaddr *addr, socklen_t addrlen)
bool connect (const SocketAddr &addr)
bool shutdown (bool stopReads, bool stopWrites)
bool getSockName (struct sockaddr *addr, socklen_t *addrlen)
bool getSockName (SocketAddr &addr)
bool getPeerName (struct sockaddr *addr, socklen_t *addrlen)
bool getPeerName (SocketAddr &addr)
int sendTo (const void *buffer, int length, const struct sockaddr *addr, socklen_t adrlen, int flags=0)
int sendTo (const void *buffer, int length, const SocketAddr &addr, int flags=0)
int send (const void *buffer, int length, int flags=0)
virtual int writeData (const void *buffer, int length)
int recvFrom (void *buffer, int length, struct sockaddr *addr=0, socklen_t *adrlen=0, int flags=0)
int recvFrom (void *buffer, int length, SocketAddr &addr, int flags=0)
int recv (void *buffer, int length, int flags=0)
virtual int readData (void *buffer, int length)
bool select (bool *readok, bool *writeok, bool *except, struct timeval *timeout=0)
bool select (bool *readok, bool *writeok, bool *except, int64_t timeout)
bool installFilter (SocketFilter *filter)
void removeFilter (SocketFilter *filter, bool delobj=false)
void clearFilters ()
virtual void timerTick (const Time &when)

Static Public Member Functions

static SOCKET invalidHandle ()
static int socketError ()
static bool canSelect (SOCKET handle)
static bool createPair (Socket &sock1, Socket &sock2, int domain=AF_UNIX)

Protected Member Functions

void copyError ()
bool checkError (int retcode, bool strict=false)
bool applyFilters (void *buffer, int length, int flags, const struct sockaddr *addr=0, socklen_t adrlen=0)

Protected Attributes

SOCKET m_handle
ObjList m_filters

Detailed Description

A generic socket class.

This class encapsulates a system dependent socket in a system independent abstraction


Member Enumeration Documentation

enum TOS

Types of service


Constructor & Destructor Documentation

Socket ( )

Default constructor, creates an invalid socket

Socket ( SOCKET  handle)

Constructor from an existing handle

Parameters:
handleOperating system handle to an existing socket
Socket ( int  domain,
int  type,
int  protocol = 0 
)

Constructor that also creates the socket handle

Parameters:
domainCommunication domain for the socket (protocol family)
typeType specification of the socket
protocolSpecific protocol for the domain, 0 to use default
virtual ~Socket ( ) [virtual]

Destructor - closes the handle if still open


Member Function Documentation

Socket* accept ( struct sockaddr *  addr = 0,
socklen_t *  addrlen = 0 
)

Create a new socket for an incoming connection attempt on a listening socket

Parameters:
addrAddress to fill in with the address of the incoming connection
addrlenLength of the address structure on input, length of address data on return
Returns:
Open socket to the new connection or NULL on failure
Socket* accept ( SocketAddr addr)

Create a new socket for an incoming connection attempt on a listening socket

Parameters:
addrAddress to fill in with the address of the incoming connection
Returns:
Open socket to the new connection or NULL on failure
SOCKET acceptHandle ( struct sockaddr *  addr = 0,
socklen_t *  addrlen = 0 
)

Create a new socket for an incoming connection attempt on a listening socket

Parameters:
addrAddress to fill in with the address of the incoming connection
addrlenLength of the address structure on input, length of address data on return
Returns:
Operating system handle to the new connection or invalidHandle() on failure
bool applyFilters ( void *  buffer,
int  length,
int  flags,
const struct sockaddr *  addr = 0,
socklen_t  adrlen = 0 
) [protected]

Apply installed filters to a received block of data

Parameters:
bufferBuffer for received data
lengthLength of the data in buffer
flagsOperating system specific bit flags of the operation
addrAddress of the incoming data, may be NULL
adrlenLength of the valid data in address structure
Returns:
True if one of the filters claimed the data
void attach ( SOCKET  handle)

Attach an existing handle to the socket, closes any existing first

Parameters:
handleOperating system handle to an existing socket
bool bind ( struct sockaddr *  addr,
socklen_t  addrlen 
)

Associates the socket with a local address

Parameters:
addrAddress to assign to this socket
addrlenLength of the address structure
Returns:
True if operation was successfull, false if an error occured
bool bind ( const SocketAddr addr) [inline]

Associates the socket with a local address

Parameters:
addrAddress to assign to this socket
Returns:
True if operation was successfull, false if an error occured

References SocketAddr::address(), Socket::bind(), and SocketAddr::length().

Referenced by Socket::bind().

virtual bool canRetry ( ) const [virtual]

Check if the last error code indicates a retryable condition

Returns:
True if error was temporary and operation should be retried

Reimplemented from Stream.

static bool canSelect ( SOCKET  handle) [static]

Check if a socket handle can be used in select

Parameters:
handleThe socket handle to check
Returns:
True if the socket handle can be safely used in select
bool canSelect ( ) const [inline]

Check if this socket object can be used in a select

Returns:
True if this socket can be safely used in select

References Socket::canSelect().

Referenced by Socket::canSelect().

bool checkError ( int  retcode,
bool  strict = false 
) [protected]

Copy the last error code from the operating system if an error occured, clear if not

Parameters:
retcodeOperation return code to check, 0 for success
strictTrue to consider errors only return codes of socketError()
Returns:
True if operation succeeded (retcode == 0), false otherwise
void clearFilters ( )

Removes and destroys all packet filters

bool connect ( struct sockaddr *  addr,
socklen_t  addrlen 
)

Connects the socket to a remote address

Parameters:
addrAddress to connect to
addrlenLength of the address structure
Returns:
True if operation was successfull, false if an error occured
bool connect ( const SocketAddr addr) [inline]

Connects the socket to a remote address

Parameters:
addrSocket address to connect to
Returns:
True if operation was successfull, false if an error occured

References SocketAddr::address(), Socket::connect(), and SocketAddr::length().

Referenced by Socket::connect().

void copyError ( ) [protected]

Copy the last error code from the operating system

bool create ( int  domain,
int  type,
int  protocol = 0 
)

Creates a new socket handle,

Parameters:
domainCommunication domain for the socket (protocol family)
typeType specification of the socket
protocolSpecific protocol for the domain, 0 to use default
Returns:
True if socket was created, false if an error occured
static bool createPair ( Socket sock1,
Socket sock2,
int  domain = AF_UNIX 
) [static]

Create a pair of bidirectionally connected sockets

Parameters:
sock1Reference to first Socket to be paired
sock2Reference to second Socket to be paired
domainCommunication domain for the sockets (protocol family)
Returns:
True is the stream pair was created successfully
SOCKET detach ( )

Detaches the object from the socket handle

Returns:
The handle previously owned by this object
bool getOption ( int  level,
int  name,
void *  buffer,
socklen_t *  length 
)

Get socket options

Parameters:
levelLevel of the option to set
nameSocket option for which the value is to be set
bufferPointer to a buffer to return the value for the requested option
lengthPointer to size of the supplied buffer, will be filled on return
Returns:
True if operation was successfull, false if an error occured
bool getPeerName ( SocketAddr addr)

Retrive the address of the remote socket of a connection

Parameters:
addrAddress to fill in with the address of the remote socket
Returns:
True if operation was successfull, false if an error occured
bool getPeerName ( struct sockaddr *  addr,
socklen_t *  addrlen 
)

Retrive the address of the remote socket of a connection

Parameters:
addrAddress to fill in with the address of the remote socket
addrlenLength of the address structure on input, length of address data on return
Returns:
True if operation was successfull, false if an error occured
bool getSockName ( struct sockaddr *  addr,
socklen_t *  addrlen 
)

Retrive the address of the local socket of a connection

Parameters:
addrAddress to fill in with the address of the local socket
addrlenLength of the address structure on input, length of address data on return
Returns:
True if operation was successfull, false if an error occured
bool getSockName ( SocketAddr addr)

Retrive the address of the local socket of a connection

Parameters:
addrAddress to fill in with the address of the local socket
Returns:
True if operation was successfull, false if an error occured
SOCKET handle ( ) const [inline]

Get the operating system handle to the socket

Returns:
Socket handle
bool installFilter ( SocketFilter filter)

Install a new packet filter in the socket

Parameters:
filterPointer to the packet filter to install
Returns:
True if the filter was installed
static SOCKET invalidHandle ( ) [static]

Get the operating system specific handle value for an invalid socket

Returns:
Handle value for an invalid socket
bool listen ( unsigned int  backlog = 0)

Start listening for incoming connections on the socket

Parameters:
backlogMaximum length of the queue of pending connections, 0 for system maximum
Returns:
True if operation was successfull, false if an error occured
Socket* peelOff ( unsigned int  assoc)

Create a new socket by peeling off an association from a SCTP socket

Parameters:
assocIdentifier of the association to peel off
Returns:
Open socket to the association or NULL on failure
SOCKET peelOffHandle ( unsigned int  assoc)

Create a new socket by peeling off an association from a SCTP socket

Parameters:
assocIdentifier of the association to peel off
Returns:
Operating system handle to the association or invalidHandle() on failure
virtual int readData ( void *  buffer,
int  length 
) [virtual]

Receive data from a connected stream socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
Returns:
Number of bytes transferred, socketError() if an error occurred

Implements Stream.

int recv ( void *  buffer,
int  length,
int  flags = 0 
)

Receive a message from a connected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred
int recvFrom ( void *  buffer,
int  length,
struct sockaddr *  addr = 0,
socklen_t *  adrlen = 0,
int  flags = 0 
)

Receive a message from a connected or unconnected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
addrAddress to fill in with the address of the incoming data
adrlenLength of the address structure on input, length of address data on return
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred
int recvFrom ( void *  buffer,
int  length,
SocketAddr addr,
int  flags = 0 
)

Receive a message from a connected or unconnected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
addrAddress to fill in with the address of the incoming data
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred
void removeFilter ( SocketFilter filter,
bool  delobj = false 
)

Removes a packet filter and optionally destroys it

Parameters:
filterPointer to the packet filter to remove from socket
delobjSet to true to also delete the filter
bool select ( bool *  readok,
bool *  writeok,
bool *  except,
int64_t  timeout 
)

Determines the availability to perform synchronous I/O of the socket

Parameters:
readokAddress of a boolean variable to fill with readability status
writeokAddress of a boolean variable to fill with writeability status
exceptAddress of a boolean variable to fill with exceptions status
timeoutMaximum time until the method returns, -1 for blocking
Returns:
True if operation was successfull, false if an error occured
bool select ( bool *  readok,
bool *  writeok,
bool *  except,
struct timeval *  timeout = 0 
)

Determines the availability to perform synchronous I/O of the socket

Parameters:
readokAddress of a boolean variable to fill with readability status
writeokAddress of a boolean variable to fill with writeability status
exceptAddress of a boolean variable to fill with exceptions status
timeoutMaximum time until the method returns, NULL for blocking
Returns:
True if operation was successfull, false if an error occured
int send ( const void *  buffer,
int  length,
int  flags = 0 
)

Send a message over a connected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred
int sendTo ( const void *  buffer,
int  length,
const struct sockaddr *  addr,
socklen_t  adrlen,
int  flags = 0 
)

Send a message over a connected or unconnected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
addrAddress to send the message to, if NULL will behave like send()
adrlenLength of the address structure
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred
int sendTo ( const void *  buffer,
int  length,
const SocketAddr addr,
int  flags = 0 
) [inline]

Send a message over a connected or unconnected socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
addrAddress to send the message to
flagsOperating system specific bit flags that change the behaviour
Returns:
Number of bytes transferred, socketError() if an error occurred

References SocketAddr::address(), SocketAddr::length(), and Socket::sendTo().

Referenced by Socket::sendTo().

virtual bool setBlocking ( bool  block = true) [virtual]

Set the blocking or non-blocking operation mode of the socket

Parameters:
blockTrue if I/O operations should block, false for non-blocking
Returns:
True if operation was successfull, false if an error occured

Reimplemented from Stream.

bool setLinger ( int  seconds = -1)

Set the way closing a socket is handled

Parameters:
secondsHow much to block waiting for socket to close, negative to no wait (close in background), zero to reset connection
Returns:
True if operation was successfull, false if an error occured
bool setOption ( int  level,
int  name,
const void *  value = 0,
socklen_t  length = 0 
)

Set socket options

Parameters:
levelLevel of the option to set
nameSocket option for which the value is to be set
valuePointer to a buffer holding the value for the requested option
lengthSize of the supplied buffer
Returns:
True if operation was successfull, false if an error occured
bool setReuse ( bool  reuse = true,
bool  exclusive = false 
)

Set the local address+port reuse flag of the socket. This method should be called before bind() or it will have no effect.

Parameters:
reuseTrue if other sockets may listen on same address+port
exclusiveGrant exclusive access to the address
Returns:
True if operation was successfull, false if an error occured
bool setTOS ( int  tos)

Set the Type of Service on the IP level of this socket

Parameters:
tosNew TOS bits to set
Returns:
True if operation was successfull, false if an error occured
bool shutdown ( bool  stopReads,
bool  stopWrites 
)

Shut down one or both directions of a full-duplex socket.

Parameters:
stopReadsRequest to shut down the read side of the socket
stopWritesRequest to shut down the write side of the socket
Returns:
True if operation was successfull, false if an error occured
static int socketError ( ) [static]

Get the operating system specific return value of a failed operation

Returns:
Return value of a failed socket operation
virtual bool terminate ( ) [virtual]

Closes the socket handle, terminates the connection

Returns:
True if socket was (already) closed, false if an error occured

Implements Stream.

virtual void timerTick ( const Time when) [virtual]

Run whatever actions required on idle thread runs. The default implementation calls SocketFilter::timerTick() for all installed filters.

Parameters:
whenTime when the idle run started
virtual bool valid ( ) const [virtual]

Check if this socket is valid

Returns:
True if the handle is valid, false if it's invalid

Implements Stream.

virtual int writeData ( const void *  buffer,
int  length 
) [virtual]

Write data to a connected stream socket

Parameters:
bufferBuffer for data transfer
lengthLength of the buffer
Returns:
Number of bytes transferred, socketError() if an error occurred

Implements Stream.


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