simple-socket library 1.1.5
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes

NET::UnixSocket Class Reference

Unix domain socket class. More...

#include <UnixSocket.h>

List of all members.

Public Types

enum  ShutdownDirection { STOP_SEND = SHUT_WR, STOP_RECEIVE = SHUT_RD, STOP_BOTH = SHUT_RDWR }

Public Member Functions

void bind (const std::string &localPath)
void connect (const std::string &foreignPath)
void disconnect ()
std::string getForeignPath () const
std::string getLocalPath () const
bool peerDisconnected () const
 returns whether a peer disconnected
int receive (void *buffer, size_t len)
 receive data from a bound socket
int send (const void *buffer, size_t len)
 send data through a connected socket
void shutdown (ShutdownDirection type)
 shutdown the connection in the specified direction
int timedReceive (void *buffer, size_t len, int timeout)
 receive data from a bound socket, return after the given timespan

Protected Types

enum  SocketDomain { INTERNET = PF_INET, UNIX = PF_LOCAL }
enum  SocketType { STREAM = SOCK_STREAM, DATAGRAM = SOCK_DGRAM }

Protected Member Functions

 UnixSocket (int type, int protocol)
 allows a subclass to create new socket

Static Protected Member Functions

static std::string extractPath (const sockaddr_un &addr, socklen_t len)
 extracts a path string from the socket address structure
static void fillAddress (const std::string &path, sockaddr_un &addr)

Protected Attributes

bool m_peerDisconnected
int m_socket

Detailed Description

Unix domain socket class.

Definition at line 11 of file UnixSocket.h.


Member Enumeration Documentation

Enumerator:
STOP_SEND 

disable all variants of send() on the socket, receive calls still work

STOP_RECEIVE 

disable all variants of receive() on the socket, send calls still work

STOP_BOTH 

disable all send() and receive() calls on the socket

Definition at line 49 of file SimpleSocket.h.

enum NET::SimpleSocket::SocketDomain [protected, inherited]
Enumerator:
INTERNET 
UNIX 

Definition at line 166 of file SimpleSocket.h.

enum NET::SimpleSocket::SocketType [protected, inherited]
Enumerator:
STREAM 
DATAGRAM 

Definition at line 172 of file SimpleSocket.h.


Constructor & Destructor Documentation

UnixSocket::UnixSocket ( int  type,
int  protocol 
) [protected]

allows a subclass to create new socket

Definition at line 9 of file UnixSocket.cpp.


Member Function Documentation

void UnixSocket::connect ( const std::string &  foreignPath)

Establish a socket connection with the given socket

Parameters:
foreignPaththe path of the remote socket
Exceptions:
SocketExceptionthrown if unable to establish connection

Definition at line 13 of file UnixSocket.cpp.

void UnixSocket::bind ( const std::string &  localPath)

Set the local path to the specified path

Parameters:
localPathspecifies where the socket should be bound
Exceptions:
SocketExceptionthrown if setting local path fails

Definition at line 22 of file UnixSocket.cpp.

std::string UnixSocket::getLocalPath ( ) const

Get the local path (after binding the socket)

Returns:
local path of socket
Exceptions:
SocketExceptionthrown if fetch fails

Definition at line 32 of file UnixSocket.cpp.

std::string UnixSocket::getForeignPath ( ) const

Get the foreign path. Call connect() before using this function.

Returns:
foreign path
Exceptions:
SocketExceptionthrown if fetch fails

Definition at line 43 of file UnixSocket.cpp.

void UnixSocket::fillAddress ( const std::string &  path,
sockaddr_un &  addr 
) [static, protected]

Fill an address structure with the given path. If the given path is not valid addr will be unchanged.

Parameters:
pathpath to unix domain socket
addraddress structure to fill
Exceptions:
SocketExceptionthrown if path is not valid

Definition at line 54 of file UnixSocket.cpp.

std::string UnixSocket::extractPath ( const sockaddr_un &  addr,
socklen_t  len 
) [static, protected]

extracts a path string from the socket address structure

Definition at line 64 of file UnixSocket.cpp.

int SimpleSocket::send ( const void *  buffer,
size_t  len 
) [inherited]

send data through a connected socket

send() can only be used on a socket that called connect() before. If you try to use send() on a not connected socket, SocketException will be thrown.

If you are using a stream oriented socket (like TCPSocket), the operating system is allowed to send only a part of the packet you told it to send, so send() will return the number of bytes actually sent. It is your responsibility to resend the data not sent by send()

If you are using a datagram oriented socket (like UDPSocket or SCTPSocket) the operating system will only send and receive complete datagrams, but send() will fail if you are trying to send too much data. In that case SocketException will be thrown.

Parameters:
bufferdata to be send
lenlength of the data to be sent
Returns:
number of bytes sent
Exceptions:
SocketExceptionif sending went wrong
Examples:
TCP_Server.cpp, and UDP_Multicast.cpp.

Definition at line 43 of file SimpleSocket.cpp.

int SimpleSocket::receive ( void *  buffer,
size_t  len 
) [inherited]

receive data from a bound socket

receive() can only be used on a socket that called bind() or connect() before. If you try to use receive() on a not bound socket, SocketException will be thrown.

If using a stream oriented Socket, receive can return a part of a received messge, e.g. if you send 100 bytes, it's possible you will receive 50 bytes two times in a row. However, the order of the sent data will be preserved.

If you are using a datagram oriented sockets, you will only receive whole datagrams. But beware of using a too small buffer. If the receive buffer is too small for the received datagram, the data you didn't read in the receive call will be discared.

If the remote host has closed the connection (on a connection based socket like TCP or SCTP) receive() will return 0. If you are using a connectionless protocol (like UDP) there is no way to determine wheter the connection has been closed by the remote host or not.

Parameters:
bufferthe buffer the received data will be written to
lenlength of the provided buffer, receive will not read more than that
Returns:
number of bytes received
Exceptions:
SocketExceptionin case an error occured
Examples:
UDP_Multicast.cpp.

Definition at line 61 of file SimpleSocket.cpp.

int SimpleSocket::timedReceive ( void *  buffer,
size_t  len,
int  timeout 
) [inherited]

receive data from a bound socket, return after the given timespan

timedReceive() can only be used on a socket that called bind() or connect before. If you try to use receive() on a not bound socket, SocketException will be thrown.

If using a stream oriented Socket, receive can return a part of a received messge, e.g. if you send 100 bytes, it's possible you will receive 50 bytes two times in a row. However, the order of the sent data will be preserved.

If you are using a datagram oriented sockets, you will only receive whole datagrams. But beware of using a too small buffer. If the receive buffer is too small for the received datagram, the data you didn't read in the receive call will be discared.

If the remote host has closed the connection (on a connection based socket like TCP or SCTP) receive() will return 0. If you are using a connectionless protocol (like UDP) there is no way to determine wheter the connection has been closed by the remote host or not.

Parameters:
bufferthe buffer the received data will be written to
lenlength of the provided buffer, receive will not read more than that
timeoutthe timeout in ms after which receive will give up and return
Returns:
number of bytes received, 0 on timeout
Exceptions:
SocketExceptionin case an error occured
Examples:
TCP_Client.cpp.

Definition at line 68 of file SimpleSocket.cpp.

void SimpleSocket::disconnect ( ) [inherited]

Disconnect and unset any foreign addresses

Exceptions:
SocketExceptionthrown if unable to disconnect
Examples:
TCP_Client.cpp, and TCP_Server.cpp.

Definition at line 88 of file SimpleSocket.cpp.

void SimpleSocket::shutdown ( ShutdownDirection  type) [inherited]

shutdown the connection in the specified direction

Depending on the specified ShutdownDirection, calls for that direction will stop working. Use this function if you want to have more control than just destroing the socket. It allows you to cut the connection in one direction, or both.

If you use shutdown() on an unconnected socket, the corresponding calls will simply stop working.

Parameters:
typethe ShutdownDirection that be used
Exceptions:
SocketExceptionin case an error occured

Definition at line 103 of file SimpleSocket.cpp.

bool SimpleSocket::peerDisconnected ( ) const [inherited]

returns whether a peer disconnected

Will only work if you use a connection oriented, connected socket. Returns true if the peer disconnected. Use this function after a call to receive, returned 0 received bytes.

Returns:
true if a peer disconnected
Examples:
TCP_Server.cpp.

Definition at line 109 of file SimpleSocket.cpp.


Member Data Documentation

int NET::SimpleSocket::m_socket [protected, inherited]

Definition at line 185 of file SimpleSocket.h.

bool NET::SimpleSocket::m_peerDisconnected [protected, inherited]

Definition at line 186 of file SimpleSocket.h.


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