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 } |
enum | Features { FProtoIpv6 = 0x0001 , FIpv6Only = 0x0002 , FBindToIface = 0x0004 , FEfficientSelect = 0x0008 , FExclusiveAddrUse = 0x0010 , FReusePort = 0x0020 } |
![]() | |
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, bool setPort=false) |
virtual bool | setLinger (int seconds=-1) |
virtual bool | bind (struct sockaddr *addr, socklen_t addrlen) |
virtual bool | bind (struct sockaddr *addr, socklen_t addrlen, const char *iface, int ifLen=-1) |
bool | bind (const SocketAddr &addr) |
virtual bool | bindIface (const char *iface, int ifLen=-1, int family=SocketAddr::Unknown) |
virtual bool | listen (unsigned int backlog=0) |
virtual Socket * | accept (struct sockaddr *addr=0, socklen_t *addrlen=0) |
virtual 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 bool | getBoundIface (String &buf) |
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 (bool del=true) |
virtual void | timerTick (const Time &when) |
![]() | |
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 unsigned int | features () |
![]() | |
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 (const void *buffer, int length, int flags, const struct sockaddr *addr=0, socklen_t adrlen=0, bool rx=true) |
![]() | |
Stream () | |
void | clearError () |
Protected Attributes | |
SOCKET | m_handle |
ObjList | m_filters |
![]() | |
int | m_error |
A generic socket class.
This class encapsulates a system dependent socket in a system independent abstraction
enum DSCP |
DiffServ bits
enum Features |
Platform specific available features
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 |
Reimplemented in SctpSocket.
|
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 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 |
rx | True if data was received, false if data was transmitted |
void attach | ( | SOCKET | handle | ) |
Attach an existing handle to the socket, closes any existing first
handle | Operating system handle to an existing socket |
|
inline |
Associates the socket with a local address Optionally associates the socket with a local interface (device) if configured
addr | Address to assign to this socket |
References SocketAddr::address(), SocketAddr::iface(), SocketAddr::length(), and String::length().
|
virtual |
Associates the socket with a local address
addr | Address to assign to this socket |
addrlen | Length of the address structure |
|
virtual |
Associates the socket with a local address Optionally associates the socket with a local interface (device)
addr | Address to assign to this socket |
addrlen | Length of the address structure |
iface | Interface to bind to, may start with '#' for an interface index |
ifLen | Interface string length, -1 to detect |
|
virtual |
Associates the socket with a local interface (device)
iface | Interface to bind to, may start with '#' for an interface index |
ifLen | Interface string length, -1 to detect |
family | Address family NOTE: IPv6 family is ignored, it should be set in address specific field (scope id) |
|
virtual |
Check if the last error code indicates a retryable condition
Reimplemented from Stream.
|
virtual |
Check if this socket object can be used in a select
|
static |
Check if a socket handle can be used in select
handle | The socket handle to check |
|
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 | ( | bool | del = true | ) |
Removes and destroys all packet filters
del | True to delete packet filters |
|
inline |
Connects the socket to a remote address
addr | Socket address to connect to |
References SocketAddr::address(), and SocketAddr::length().
|
virtual |
Connects the socket to a remote address
addr | Address to connect to |
addrlen | Length of the address structure |
|
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(), 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 |
|
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 |
|
inlinestatic |
Retrieve available features
|
virtual |
Retrieve the name of the interface this socket is bound to
buf | Destination string |
|
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 |
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 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 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 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 |
|
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 |
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 |
|
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 |
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 |
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 |
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 |
|
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 |
|
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(), and SocketAddr::length().
|
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 |
|
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 |
|
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 |
|
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. Function will fail if exclusive is requested and feature is not available |
setPort | Set port reuse flag also. Function will fail if reuse is requested and port reuse feature is not available |
|
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 |
|
virtual |
Set the Type of Service or Differentiated Services Code Point on the IP level of this socket
tos | New TOS or DiffServ bits |
|
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
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.