Yate
|
A generic socket class. More...
#include <yateclass.h>
Public Types | |
enum | TOS { Normal = 0, LowDelay = IPTOS_LOWDELAY, MaxThroughput = IPTOS_THROUGHPUT, MaxReliability = IPTOS_RELIABILITY, MinCost = IPTOS_MINCOST } |
enum | DSCP { DefaultPHB = 0x00, CS0 = 0x00, CS1 = 0x20, CS2 = 0x40, CS3 = 0x60, CS4 = 0x80, CS5 = 0xa0, CS6 = 0xc0, CS7 = 0xe0, AF11 = 0x28, AF12 = 0x30, AF13 = 0x38, AF21 = 0x48, AF22 = 0x50, AF23 = 0x58, AF31 = 0x68, AF32 = 0x70, AF33 = 0x78, AF41 = 0x88, AF42 = 0x90, AF43 = 0x98, ExpeditedFwd = 0xb8, VoiceAdmit = 0xb0 } |
Public Types inherited from Stream | |
enum | SeekPos { SeekBegin, SeekEnd, SeekCurrent } |
Public Member Functions | |
Socket () | |
Socket (SOCKET handle) | |
Socket (int domain, int type, int protocol=0) | |
virtual | ~Socket () |
virtual 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 | inProgress () const |
virtual bool | valid () const |
virtual bool | setOption (int level, int name, const void *value=0, socklen_t length=0) |
bool | setIpv6OnlyOption (bool on) |
virtual bool | getOption (int level, int name, void *buffer, socklen_t *length) |
virtual bool | setParams (const NamedList ¶ms) |
virtual bool | getParams (const String ¶ms, NamedList &result) |
virtual bool | setTOS (int tos) |
bool | setTOS (const char *tos, int defTos=Normal) |
virtual int | getTOS () |
virtual bool | setBlocking (bool block=true) |
virtual bool | setReuse (bool reuse=true, bool exclusive=false) |
virtual bool | setLinger (int seconds=-1) |
virtual bool | bind (struct sockaddr *addr, socklen_t addrlen) |
bool | bind (const SocketAddr &addr) |
virtual bool | listen (unsigned int backlog=0) |
virtual Socket * | accept (struct sockaddr *addr=0, socklen_t *addrlen=0) |
Socket * | accept (SocketAddr &addr) |
SOCKET | acceptHandle (struct sockaddr *addr=0, socklen_t *addrlen=0) |
bool | updateError () |
virtual bool | canSelect () const |
virtual bool | connect (struct sockaddr *addr, socklen_t addrlen) |
bool | connect (const SocketAddr &addr) |
virtual bool | connectAsync (struct sockaddr *addr, socklen_t addrlen, unsigned int toutUs, bool *timeout=0) |
bool | connectAsync (const SocketAddr &addr, unsigned int toutUs, bool *timeout=0) |
virtual bool | shutdown (bool stopReads, bool stopWrites) |
virtual bool | getSockName (struct sockaddr *addr, socklen_t *addrlen) |
bool | getSockName (SocketAddr &addr) |
virtual bool | getPeerName (struct sockaddr *addr, socklen_t *addrlen) |
bool | getPeerName (SocketAddr &addr) |
virtual 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) |
virtual int | send (const void *buffer, int length, int flags=0) |
virtual int | writeData (const void *buffer, int length) |
virtual 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) |
virtual int | recv (void *buffer, int length, int flags=0) |
virtual int | readData (void *buffer, int length) |
virtual 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) |
Public Member Functions inherited from Stream | |
virtual | ~Stream () |
int | error () const |
int | writeData (const char *str) |
int | writeData (const String &str) |
int | writeData (const DataBlock &buf) |
virtual int64_t | length () |
virtual int64_t | seek (SeekPos pos, int64_t offset=0) |
int64_t | seek (int64_t offset) |
Static Public Member Functions | |
static SOCKET | invalidHandle () |
static int | socketError () |
static const TokenDict * | tosValues () |
static bool | efficientSelect () |
static bool | canSelect (SOCKET handle) |
static bool | createPair (Socket &sock1, Socket &sock2, int domain=AF_UNIX) |
Static Public Member Functions inherited from Stream | |
static bool | allocPipe (Stream *&reader, Stream *&writer) |
static bool | allocPair (Stream *&str1, Stream *&str2) |
static bool | supportsPipes () |
static bool | supportsPairs () |
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 Member Functions inherited from Stream | |
Stream () | |
void | clearError () |
Protected Attributes | |
SOCKET | m_handle |
ObjList | m_filters |
Protected Attributes inherited from Stream | |
int | m_error |
A generic socket class.
This class encapsulates a system dependent socket in a system independent abstraction
enum DSCP |
DiffServ bits
enum TOS |
Types of service
Socket | ( | ) |
Default constructor, creates an invalid socket
|
explicit |
Constructor from an existing handle
handle | Operating system handle to an existing socket |
Socket | ( | int | domain, |
int | type, | ||
int | protocol = 0 |
||
) |
Constructor that also creates the socket handle
domain | Communication domain for the socket (protocol family) |
type | Type specification of the socket |
protocol | Specific protocol for the domain, 0 to use default |
|
virtual |
Destructor - closes the handle if still open
|
virtual |
Create a new socket for an incoming connection attempt on a listening socket
addr | Address to fill in with the address of the incoming connection |
addrlen | Length of the address structure on input, length of address data on return |
Socket* accept | ( | SocketAddr & | addr | ) |
Create a new socket for an incoming connection attempt on a listening socket
addr | Address to fill in with the address of the incoming connection |
SOCKET acceptHandle | ( | struct sockaddr * | addr = 0 , |
socklen_t * | addrlen = 0 |
||
) |
Create a new socket for an incoming connection attempt on a listening socket
addr | Address to fill in with the address of the incoming connection |
addrlen | Length of the address structure on input, length of address data on return |
|
protected |
Apply installed filters to a received block of data
buffer | Buffer for received data |
length | Length of the data in buffer |
flags | Operating system specific bit flags of the operation |
addr | Address of the incoming data, may be NULL |
adrlen | Length of the valid data in address structure |
void attach | ( | SOCKET | handle | ) |
Attach an existing handle to the socket, closes any existing first
handle | Operating system handle to an existing socket |
|
virtual |
Associates the socket with a local address
addr | Address to assign to this socket |
addrlen | Length of the address structure |
Referenced by Socket::bind().
|
inline |
Associates the socket with a local address
addr | Address to assign to this socket |
References SocketAddr::address(), Socket::bind(), and SocketAddr::length().
|
virtual |
Check if the last error code indicates a retryable condition
Reimplemented from Stream.
|
static |
Check if a socket handle can be used in select
handle | The socket handle to check |
|
virtual |
Check if this socket object can be used in a select
|
protected |
Copy the last error code from the operating system if an error occured, clear if not
retcode | Operation return code to check, 0 for success |
strict | True to consider errors only return codes of socketError() |
void clearFilters | ( | ) |
Removes and destroys all packet filters
|
virtual |
Connects the socket to a remote address
addr | Address to connect to |
addrlen | Length of the address structure |
Referenced by Socket::connect().
|
inline |
Connects the socket to a remote address
addr | Socket address to connect to |
References SocketAddr::address(), Socket::connect(), and SocketAddr::length().
|
virtual |
Asynchronously connects the socket to a remote address. The socket must be selectable and in non-blocking operation mode
addr | Address to connect to |
addrlen | Length of the address structure |
toutUs | Timeout interval in microseconds |
timeout | Optional boolean flag to signal timeout |
Referenced by Socket::connectAsync().
|
inline |
Asynchronously connects the socket to a remote address. The socket must be selectable and in non-blocking operation mode
addr | Socket address to connect to |
toutUs | Timeout interval in microseconds |
timeout | Optional boolean flag to signal timeout |
References SocketAddr::address(), Socket::connectAsync(), and SocketAddr::length().
|
protected |
Copy the last error code from the operating system
|
virtual |
Creates a new socket handle,
domain | Communication domain for the socket (protocol family) |
type | Type specification of the socket |
protocol | Specific protocol for the domain, 0 to use default |
SOCKET detach | ( | ) |
Detaches the object from the socket handle
|
static |
|
virtual |
Get socket options
level | Level of the option to set |
name | Socket option for which the value is to be set |
buffer | Pointer to a buffer to return the value for the requested option |
length | Pointer to size of the supplied buffer, will be filled on return |
Get specific socket parameters.
params | Coma separated list of parameters to obtain |
result | List of parameters to fill |
|
virtual |
Retrieve the address of the remote socket of a connection
addr | Address to fill in with the address of the remote socket |
addrlen | Length of the address structure on input, length of address data on return |
bool getPeerName | ( | SocketAddr & | addr | ) |
Retrieve the address of the remote socket of a connection
addr | Address to fill in with the address of the remote socket |
|
virtual |
Retrieve the address of the local socket of a connection
addr | Address to fill in with the address of the local socket |
addrlen | Length of the address structure on input, length of address data on return |
bool getSockName | ( | SocketAddr & | addr | ) |
Retrieve the address of the local socket of a connection
addr | Address to fill in with the address of the local socket |
|
virtual |
Retrieve the TOS / DSCP on the IP level of this socket
|
inline |
Get the operating system handle to the socket
|
virtual |
Check if the last error code indicates a non blocking operation in progress
Reimplemented from Stream.
bool installFilter | ( | SocketFilter * | filter | ) |
Install a new packet filter in the socket
filter | Pointer to the packet filter to install |
|
static |
Get the operating system specific handle value for an invalid socket
|
virtual |
Start listening for incoming connections on the socket
backlog | Maximum length of the queue of pending connections, 0 for system maximum |
|
virtual |
Receive data from a connected stream socket
buffer | Buffer for data transfer |
length | Length of the buffer |
Implements Stream.
|
virtual |
Receive a message from a connected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
flags | Operating system specific bit flags that change the behaviour |
|
virtual |
Receive a message from a connected or unconnected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
addr | Address to fill in with the address of the incoming data |
adrlen | Length of the address structure on input, length of address data on return |
flags | Operating system specific bit flags that change the behaviour |
int recvFrom | ( | void * | buffer, |
int | length, | ||
SocketAddr & | addr, | ||
int | flags = 0 |
||
) |
Receive a message from a connected or unconnected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
addr | Address to fill in with the address of the incoming data |
flags | Operating system specific bit flags that change the behaviour |
void removeFilter | ( | SocketFilter * | filter, |
bool | delobj = false |
||
) |
Removes a packet filter and optionally destroys it
filter | Pointer to the packet filter to remove from socket |
delobj | Set to true to also delete the filter |
|
virtual |
Determines the availability to perform synchronous I/O of the socket
readok | Address of a boolean variable to fill with readability status |
writeok | Address of a boolean variable to fill with writeability status |
except | Address of a boolean variable to fill with exceptions status |
timeout | Maximum time until the method returns, NULL for blocking |
bool select | ( | bool * | readok, |
bool * | writeok, | ||
bool * | except, | ||
int64_t | timeout | ||
) |
Determines the availability to perform synchronous I/O of the socket
readok | Address of a boolean variable to fill with readability status |
writeok | Address of a boolean variable to fill with writeability status |
except | Address of a boolean variable to fill with exceptions status |
timeout | Maximum time until the method returns, -1 for blocking |
|
virtual |
Send a message over a connected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
flags | Operating system specific bit flags that change the behaviour |
|
virtual |
Send a message over a connected or unconnected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
addr | Address to send the message to, if NULL will behave like send() |
adrlen | Length of the address structure |
flags | Operating system specific bit flags that change the behaviour |
Referenced by Socket::sendTo().
|
inline |
Send a message over a connected or unconnected socket
buffer | Buffer for data transfer |
length | Length of the buffer |
addr | Address to send the message to |
flags | Operating system specific bit flags that change the behaviour |
References SocketAddr::address(), SocketAddr::length(), and Socket::sendTo().
|
virtual |
Set the blocking or non-blocking operation mode of the socket
block | True if I/O operations should block, false for non-blocking |
Reimplemented from Stream.
|
inline |
Set or reset socket IPv6 only option. This option will tell to an IPv6 socket to accept only IPv6 packets. IPv4 packets will be accepted if disabled. This method will fail for non PF_INET6 sockets
on | True to set, false to reset it |
References Socket::setOption().
|
virtual |
Set the way closing a socket is handled
seconds | How much to block waiting for socket to close, negative to no wait (close in background), zero to reset connection |
|
virtual |
Set socket options
level | Level of the option to set |
name | Socket option for which the value is to be set |
value | Pointer to a buffer holding the value for the requested option |
length | Size of the supplied buffer |
Referenced by Socket::setIpv6OnlyOption().
|
inlinevirtual |
Set specific socket parameters.
params | List of parameters |
|
virtual |
Set the local address+port reuse flag of the socket. This method should be called before bind() or it will have no effect.
reuse | True if other sockets may listen on same address+port |
exclusive | Grant exclusive access to the address |
|
virtual |
Set the Type of Service or Differentiated Services Code Point on the IP level of this socket
tos | New TOS or DiffServ bits |
Referenced by Socket::setTOS().
|
inline |
Set the Type of Service or Differentiated Services Code Point on the IP level of this socket
tos | Keyword describing new TOS or DSCP value |
defTos | Default TOS or DiffServ value to set if the keyword is not recognized |
References TelEngine::lookup(), Socket::setTOS(), and Socket::tosValues().
|
virtual |
Shut down one or both directions of a full-duplex socket.
stopReads | Request to shut down the read side of the socket |
stopWrites | Request to shut down the write side of the socket |
|
static |
Get the operating system specific return value of a failed operation
|
virtual |
Closes the socket handle, terminates the connection
Implements Stream.
|
virtual |
Run whatever actions required on idle thread runs. The default implementation calls SocketFilter::timerTick() for all installed filters.
when | Time when the idle run started |
|
static |
Retrieve the keyword lookup table for TOS / DSCP values
Referenced by Socket::setTOS().
bool updateError | ( | ) |
Update socket error from socket options. This method should be called when select() indicates a non blocking operation completed. Note: if false is returned, the socket error is the reason of getOption() failure
|
virtual |
Check if this socket is valid
Implements Stream.
|
virtual |
Write data to a connected stream socket
buffer | Buffer for data transfer |
length | Length of the buffer |
Implements Stream.