Fawkes API  Fawkes Development Version
fawkes::Socket Class Referenceabstract

Socket base class. More...

#include <netcomm/socket/socket.h>

Inheritance diagram for fawkes::Socket:

Public Member Functions

 Socket (int domain, int type, int protocol, float timeout=0.f)
 Constructor similar to syscall. More...
 
 Socket (Socket &socket)
 Copy constructor. More...
 
virtual ~Socket ()
 Destructor. More...
 
virtual void connect (const char *hostname, const unsigned short int port)
 Connect socket. More...
 
virtual void connect (struct sockaddr *addr_port, unsigned int struct_size)
 Connect socket. More...
 
virtual void bind (const unsigned short int port)
 Bind socket. More...
 
virtual void bind (const unsigned short int port, const char *hostname)
 Bind socket to a specific address. More...
 
virtual void listen (int backlog=1)
 Listen on socket. More...
 
virtual Socketaccept ()
 Accept connection. More...
 
virtual void close ()
 Close socket. More...
 
virtual bool available ()
 Check if data is available. More...
 
virtual size_t read (void *buf, size_t count, bool read_all=true)
 Read from socket. More...
 
virtual void write (const void *buf, size_t count)
 Write to the socket. More...
 
virtual void send (void *buf, size_t buf_len)
 Write to the socket. More...
 
virtual void send (void *buf, size_t buf_len, const struct sockaddr *to_addr, socklen_t addr_len)
 Send message. More...
 
virtual size_t recv (void *buf, size_t buf_len)
 Read from socket. More...
 
virtual size_t recv (void *buf, size_t buf_len, struct sockaddr *from_addr, socklen_t *addr_len)
 Receive data. More...
 
virtual Socketclone ()=0
 Clone socket. More...
 
virtual short poll (int timeout=-1, short what=POLL_IN|POLL_HUP|POLL_PRI|POLL_RDHUP)
 Wait for some event on socket. More...
 
virtual bool listening ()
 Is socket listening for connections? More...
 
virtual unsigned int mtu ()
 Maximum Transfer Unit (MTU) of socket. More...
 
template<class SocketType >
SocketType * accept ()
 Accept connection. More...
 

Static Public Attributes

static const short POLL_IN = POLLIN
 Data can be read. More...
 
static const short POLL_OUT = POLLOUT
 Writing will not block. More...
 
static const short POLL_PRI = POLLPRI
 There is urgent data to read (e.g., out-of-band data on TCP socket; pseudo-terminal master in packet mode has seen state change in slave). More...
 
static const short POLL_RDHUP = 0
 Stream socket peer closed connection, or shut down writing half of connection. More...
 
static const short POLL_ERR = POLLERR
 Error condition. More...
 
static const short POLL_HUP = POLLHUP
 Hang up. More...
 
static const short POLL_NVAL = POLLNVAL
 Invalid request. More...
 

Protected Member Functions

 Socket ()
 Constructor. More...
 

Protected Attributes

int sock_fd
 Socket file descriptor. More...
 
float timeout
 Timeout in seconds for various operations. More...
 
struct::sockaddr_in * client_addr
 Client address, set if connected. More...
 
unsigned int client_addr_len
 length in bytes of client address. More...
 

Detailed Description

Socket base class.

This is the base class for all sockets. You cannot use it directly but you have to use one of the derivatives like StreamSocket or DatagramSocket.

Author
Tim Niemueller

Definition at line 65 of file socket.h.

Constructor & Destructor Documentation

fawkes::Socket::Socket ( int  domain,
int  type,
int  protocol,
float  timeout = 0.f 
)

Constructor similar to syscall.

This creates a new socket. This is a plain pass-through constructor to the socket() syscall. In most cases this should only be used by a derivate.

Parameters
domaincommunication domain, selects the protocol
typetype of the sockets which specifies communication semantics
protocolprotocol to use, most types support only one and protocol should be 0
timeoutSee Socket::timeout.
Exceptions
SocketExceptionthrown if socket cannot be opened, check errno for cause

Definition at line 155 of file socket.cpp.

References client_addr, client_addr_len, sock_fd, and timeout.

fawkes::Socket::Socket ( Socket socket)

Copy constructor.

Parameters
socketsocket to copy

Definition at line 191 of file socket.cpp.

References client_addr, client_addr_len, sock_fd, and timeout.

fawkes::Socket::~Socket ( )
virtual

Destructor.

Definition at line 207 of file socket.cpp.

References client_addr, and close().

fawkes::Socket::Socket ( )
protected

Constructor.

Plain constructor. The socket will not be opened. This may only be called by sub-classes and you must ensure that the socket file descriptor is initialized properly.

Definition at line 179 of file socket.cpp.

References client_addr, client_addr_len, sock_fd, and timeout.

Member Function Documentation

Socket * fawkes::Socket::accept ( )
virtual

Accept connection.

Accepts a connection waiting in the queue.

Returns
new socket used to communicate with the remote part
Exceptions
SocketExceptionthrown if socket cannot accept, check errno for cause

Definition at line 371 of file socket.cpp.

References client_addr, client_addr_len, clone(), and sock_fd.

Referenced by accept(), and fawkes::NetworkAcceptorThread::loop().

template<class SocketType >
SocketType * fawkes::Socket::accept ( )

Accept connection.

This method works like accept() but it ensures that the returned socket is of the given type.

Returns
socket to client

Definition at line 135 of file socket.h.

References accept().

bool fawkes::Socket::available ( )
virtual

Check if data is available.

Use this to check if data is available on the socket for reading.

Returns
true, if data can be read, false otherwise

Definition at line 411 of file socket.cpp.

References sock_fd.

Referenced by fawkes::FawkesNetworkTransceiver::recv(), firevision::FuseNetworkTransceiver::recv(), and fawkes::WorldInfoTransceiver::recv().

void fawkes::Socket::bind ( const unsigned short int  port)
virtual

Bind socket.

Can only be called on stream sockets.

Parameters
portport to bind
Exceptions
SocketExceptionthrown if socket cannot bind, check errno for cause

Definition at line 298 of file socket.cpp.

References sock_fd.

Referenced by bind(), fawkes::NetworkAcceptorThread::NetworkAcceptorThread(), and SplRefBoxRepeater::SplRefBoxRepeater().

void fawkes::Socket::bind ( const unsigned short int  port,
const char *  hostname 
)
virtual

Bind socket to a specific address.

Parameters
portport to bind
hostnamehostname or textual IP address of a local interface to bind to.
Exceptions
SocketExceptionthrown if socket cannot bind, check errno for cause

Definition at line 323 of file socket.cpp.

References bind(), and sock_fd.

virtual Socket* fawkes::Socket::clone ( )
pure virtual

Clone socket.

This method has to be implemented by subclass to correctly clone the instance.

Returns
cloned socket

Implemented in fawkes::BroadcastDatagramSocket, fawkes::MulticastDatagramSocket, fawkes::DatagramSocket, and fawkes::StreamSocket.

Referenced by accept().

void fawkes::Socket::connect ( const char *  hostname,
const unsigned short int  port 
)
virtual

Connect socket.

If called for a stream socket this will connect to the remote address. If you call this on a datagram socket you will tune in to a specific sender and receiver.

Parameters
hostnamehostname or textual represenation of IP address to connect to
portport to connect to
Exceptions
SocketExceptionthrown if socket cannot connect, check errno for cause

Definition at line 270 of file socket.cpp.

References sock_fd.

Referenced by firevision::FuseClient::connect(), fawkes::FawkesNetworkClient::connect(), and connect().

void fawkes::Socket::connect ( struct sockaddr *  addr_port,
unsigned int  struct_size 
)
virtual

Connect socket.

If called for a stream socket this will connect to the remote address. If you call this on a datagram socket you will tune in to a specific sender and receiver.

Parameters
addr_portstruct containing address and port to connect to
struct_sizesize of addr_port struct
Exceptions
SocketExceptionthrown if socket cannot connect, check errno for cause

Definition at line 237 of file socket.cpp.

References connect(), sock_fd, fawkes::time_diff_sec(), and timeout.

void fawkes::Socket::listen ( int  backlog = 1)
virtual

Listen on socket.

This waits for new connections on a bound socket. The backlog is the maximum number of connections waiting for being accepted.

Parameters
backlogmaximum number of waiting connections
Exceptions
SocketExceptionthrown if socket cannot listen, check errno for cause
See also
bind()
accept()

Definition at line 357 of file socket.cpp.

References sock_fd.

Referenced by fawkes::NetworkAcceptorThread::NetworkAcceptorThread().

bool fawkes::Socket::listening ( )
virtual

Is socket listening for connections?

Returns
true if socket is listening for incoming connections, false otherwise

Definition at line 712 of file socket.cpp.

References sock_fd.

unsigned int fawkes::Socket::mtu ( )
virtual

Maximum Transfer Unit (MTU) of socket.

Note that this can only be retrieved of connected sockets!

Returns
MTU in bytes

Definition at line 730 of file socket.cpp.

References sock_fd.

short fawkes::Socket::poll ( int  timeout = -1,
short  what = POLL_IN | POLL_HUP | POLL_PRI | POLL_RDHUP 
)
virtual

Wait for some event on socket.

Parameters
timeouttimeout in miliseconds to wait. A negative value means to wait forever until an event occurs, zero means just check, don't wait.
whatwhat to wait for, a bitwise OR'ed combination of POLL_IN, POLL_OUT and POLL_PRI.
Returns
Returns a flag value. Use bit-wise AND with the POLL_* constants in this class.
Exceptions
InterruptedExceptionthrown, if poll is interrupted by a signal
SocketExceptionthrown for any other error the poll() syscall can cause, see Exception::errno() for the cause of the error.
See also
Socket::POLL_IN
Socket::POLL_OUT
Socket::POLL_PRI
Socket::POLL_RDHUP
Socket::POLL_ERR
Socket::POLL_HUP
Socket::POLL_NVAL

Definition at line 452 of file socket.cpp.

References POLL_ERR, and sock_fd.

Referenced by fawkes::FawkesNetworkServerClientThread::loop(), firevision::FuseServerClientThread::loop(), fawkes::FawkesNetworkClientRecvThread::loop(), and Msl2010RefBoxProcessor::refbox_process().

size_t fawkes::Socket::read ( void *  buf,
size_t  count,
bool  read_all = true 
)
virtual

Read from socket.

Read from the socket. This method can only be used on streams.

Parameters
bufbuffer to write from
countlength of buffer, number of bytes to write to stream
read_allsetting this to true causes a call to read() loop until exactly count bytes have been read, if false it will return after the first successful read with the number of bytes available then.
Returns
number of bytes read.
See also
write
Exceptions
SocketExceptionthrown for any error during reading

Definition at line 525 of file socket.cpp.

References sock_fd, fawkes::time_diff_sec(), and timeout.

Referenced by fawkes::FawkesNetworkTransceiver::recv(), firevision::FuseNetworkTransceiver::recv(), Msl2010RefBoxProcessor::refbox_process(), MidsizeRefBoxRepeater::run(), Msl2008RefBoxRepeater::run(), and Msl2010RefBoxRepeater::run().

size_t fawkes::Socket::recv ( void *  buf,
size_t  buf_len 
)
virtual

Read from socket.

Read from the socket. This method can only be used on streams. Usage of read() is recommended.

Parameters
bufbuffer to read data into
buf_lenlength of buffer, number of bytes to read from stream
Returns
number of bytes read
Exceptions
SocketExceptionthrown if an error occurs or the other side has closed the connection.

Definition at line 628 of file socket.cpp.

References sock_fd.

Referenced by fawkes::WorldInfoTransceiver::recv(), and SplRefBoxRepeater::run().

size_t fawkes::Socket::recv ( void *  buf,
size_t  buf_len,
struct sockaddr *  addr,
socklen_t *  addr_len 
)
virtual

Receive data.

This will use recvfrom() to read data from the socket and returns the number of bytes actually read. It will not wait until the requested number of bytes has been read. Use read() if you need this.

Parameters
bufbuffer that read data shall be stored in.
buf_lenlength of buffer and number of bytes to be read
addrreturn parameter, contains address of sender
addr_leninitially has to contain size of address, on return contains the actual bytes used.
Returns
number of bytes received

Definition at line 693 of file socket.cpp.

References sock_fd.

void fawkes::Socket::send ( void *  buf,
size_t  buf_len 
)
virtual

Write to the socket.

Write to the socket. This method can be used on streams or on datagram sockets which have been tuned to a specific receiver by using connect(). For streams usage of write() is recommended as it is the more intuitive way to deal with a stream.

Parameters
bufbuffer to write
buf_lenlength of buffer, number of bytes to write to stream
See also
write

Definition at line 608 of file socket.cpp.

References write().

Referenced by fawkes::BroadcastDatagramSocket::send(), fawkes::MulticastDatagramSocket::send(), and fawkes::WorldInfoTransceiver::send().

void fawkes::Socket::send ( void *  buf,
size_t  buf_len,
const struct sockaddr *  addr,
socklen_t  addr_len 
)
virtual

Send message.

Parameters
bufbuffer with data to send
buf_lenlength of buffer, all data will be send.
addraddr to send data to.
addr_lenlength of address

Definition at line 647 of file socket.cpp.

References sock_fd, fawkes::time_diff_sec(), and timeout.

void fawkes::Socket::write ( const void *  buf,
size_t  count 
)
virtual

Write to the socket.

Write to the socket. This method can only be used on streams.

Parameters
bufbuffer to write
countnumber of bytes to write from buf
Exceptions
SocketExceptionif the data could not be written or if a timeout occured.

Definition at line 481 of file socket.cpp.

References sock_fd, fawkes::time_diff_sec(), and timeout.

Referenced by fawkes::FawkesNetworkTransceiver::send(), firevision::FuseNetworkTransceiver::send(), and send().

Member Data Documentation

fawkes::Socket::client_addr
protected

Client address, set if connected.

Definition at line 127 of file socket.h.

Referenced by accept(), Socket(), and ~Socket().

fawkes::Socket::client_addr_len
protected

length in bytes of client address.

Definition at line 128 of file socket.h.

Referenced by accept(), and Socket().

const short fawkes::Socket::POLL_ERR = POLLERR
static

Error condition.

Definition at line 73 of file socket.h.

Referenced by fawkes::FawkesNetworkServerClientThread::loop(), fawkes::FawkesNetworkClientRecvThread::loop(), and poll().

const short fawkes::Socket::POLL_HUP = POLLHUP
static
const short fawkes::Socket::POLL_IN = POLLIN
static

Data can be read.

Definition at line 69 of file socket.h.

Referenced by fawkes::FawkesNetworkServerClientThread::loop(), and fawkes::FawkesNetworkClientRecvThread::loop().

const short fawkes::Socket::POLL_NVAL = POLLNVAL
static

Invalid request.

Definition at line 75 of file socket.h.

const short fawkes::Socket::POLL_OUT = POLLOUT
static

Writing will not block.

Definition at line 70 of file socket.h.

const short fawkes::Socket::POLL_PRI = POLLPRI
static

There is urgent data to read (e.g., out-of-band data on TCP socket; pseudo-terminal master in packet mode has seen state change in slave).

Definition at line 71 of file socket.h.

const short fawkes::Socket::POLL_RDHUP = 0
static

Stream socket peer closed connection, or shut down writing half of connection.

The _GNU_SOURCE feature test macro must be defined in order to obtain this definition (since Linux 2.6.17).

Definition at line 72 of file socket.h.

Referenced by fawkes::FawkesNetworkServerClientThread::loop(), and fawkes::FawkesNetworkClientRecvThread::loop().

fawkes::Socket::timeout
protected

Timeout in seconds for various operations.

If the timeout is non-zero the socket is initialized non-blocking and operations are aborted after timeout seconds have passed.

Definition at line 126 of file socket.h.

Referenced by connect(), read(), send(), Socket(), and write().


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