ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Friends | List of all members
anna::comm::ServerSocket Class Reference

#include <ServerSocket.hpp>

Inheritance diagram for anna::comm::ServerSocket:
Inheritance graph
[legend]
Collaboration diagram for anna::comm::ServerSocket:
Collaboration graph
[legend]

Public Types

typedef Recycler< LocalConnection >::iterator iterator
 

Public Member Functions

 ServerSocket (TransportFactory *transportFactory=NULL, Domain::_v domain=Socket::Domain::Inet, Type::_v type=Socket::Type::Stream)
 
 ServerSocket (const INetAddress &localAddress, const bool sharedBind, TransportFactory *transportFactory=NULL)
 
virtual ~ServerSocket ()
 
const MillisecondgetBindDelay ()
 
BinderSocketgetBinderSocket ()
 
bool isSharedBind () const
 
void setBacklog (const int backlog)
 
void setBindDelay (const Millisecond &bindDelay)
 
virtual void prepare () noexcept(false)
 
LocalConnectionaccept () noexcept(false)
 
void release (LocalConnection *localConnection) noexcept(false)
 
iterator begin ()
 
iterator end ()
 
virtual std::string asString () const
 
virtual xml::NodeasXML (xml::Node *parent) const noexcept(false)
 
virtual bool eventAcceptConnection (const ClientSocket &clientSocket) noexcept(false)
 
- Public Member Functions inherited from anna::comm::Socket
virtual ~Socket ()
 
int getfd () const
 
Type::_v getType () const
 
Domain::_v getDomain () const
 
int getCategory () const
 
bool support (const char *transportClassName) const
 
bool isBound () const
 
bool isOpened () const
 
virtual bool isSecure () const
 
const AccessPointgetLocalAccessPoint () const
 
TransportFactorygetTransportFactory () const
 
ReceiverFactorygetReceiverFactory ()
 
bool setBlockingMode (const bool blockingMode) noexcept(false)
 
bool setReuseMode (const bool reuseMode) noexcept(false)
 
void setTransportFactory (TransportFactory *transportFactory)
 
void setReceiverFactory (ReceiverFactory &receiverFactory)
 
void setCategory (const int category)
 
void close ()
 
virtual void bind () noexcept(false)
 
- Public Member Functions inherited from anna::Mutex
 Mutex (const Mode::_v mode=Mode::Recursive)
 
virtual ~Mutex ()
 
virtual void lock () noexcept(false)
 
virtual void unlock ()
 
bool trylock () noexcept(false)
 
 operator const pthread_mutex_t * () const
 

Static Public Member Functions

static LocalConnectionlocalConnection (iterator &ii)
 
static const char * className ()
 

Static Public Attributes

static const Millisecond DefaultBindDelay
 
static const int defaultBacklog = 30
 

Protected Member Functions

 ServerSocket (const INetAddress &localAddress, const bool sharedBind, Type::_v type, TransportFactory *transportFactory=NULL)
 
- Protected Member Functions inherited from anna::comm::Socket
 Socket (const Domain::_v domain, const Type::_v type, TransportFactory *transportFactory=NULL)
 
 Socket (const INetAddress &localAddress, const Type::_v type, TransportFactory *transportFactory=NULL)
 
 Socket (const std::string &path, const Type::_v type, TransportFactory *transportFactory=NULL)
 
void open () noexcept(false)
 
virtual void do_close ()
 
- Protected Member Functions inherited from anna::Safe
 Safe ()
 

Friends

class BinderSocket
 

Additional Inherited Members

- Static Protected Member Functions inherited from anna::comm::Socket
static const char * asText (const Notify::_v v)
 
- Protected Attributes inherited from anna::comm::Socket
const Domain::_v a_domain
 
const Type::_v a_type
 
int a_fd
 
AccessPoint a_localAccessPoint
 
bool a_isBound
 
TransportFactorya_transportFactory
 
ReceiverFactorya_receiverFactory
 
int a_category
 

Detailed Description

Esta clase implementa el servidor de Socket. Un servidor de Socket espera las peticiones de entrada procedentes de la red y realiza las operaciones necesarias para tratar la operacion y posiblemente devolver un resultado al peticionario.

El 'backlog' de un servidor de socket define la longitud maxima que la cola de mensajes pendientes puede alcanzar. Si cliente realiza una peticion mediante una conexion UF_UNIX cuando la cola de mensajes del servidor esta llena recibira un error ECONNREFUSED, aunque normalmente el protocolo subyacente se encarga de retransmitir la peticion un numero indeterminado de veces.

See also
Communicator::accept

Member Typedef Documentation

◆ iterator

Constructor & Destructor Documentation

◆ ServerSocket() [1/3]

anna::comm::ServerSocket::ServerSocket ( TransportFactory transportFactory = NULL,
Domain::_v  domain = Socket::Domain::Inet,
Type::_v  type = Socket::Type::Stream 
)
inline

Crea un servidor de socket liberado.

Parameters
transportFactoryFactoria de protocolos de transporte a usar por este sockets.
domainDominio del socket.
typeTipo de socket.
Warning
La Factoria de protocolos debe estar disponible mientras el Socket esta activo.
59  :
60  Socket(domain, type, transportFactory),
61  a_backlog(defaultBacklog),
62  a_sharedBind(false),
63  a_binderSocket(NULL),
64  a_msBindDelay(DefaultBindDelay) {}
static const Millisecond DefaultBindDelay
Definition: ServerSocket.hpp:43
static const int defaultBacklog
Definition: ServerSocket.hpp:50
Socket(const Domain::_v domain, const Type::_v type, TransportFactory *transportFactory=NULL)

◆ ServerSocket() [2/3]

anna::comm::ServerSocket::ServerSocket ( const INetAddress localAddress,
const bool  sharedBind,
TransportFactory transportFactory = NULL 
)
inline

Crea un servidor de socket conectado a la direccion y puerto indicado y con la longitud de cola maxima indicada.

Parameters
localAddressDireccion Local en la que atendera las peticiones.
transportFactoryFactoria de protocolos de transporte a usar por este sockets.
sharedBindtrue Si puede haber mas de una aplicacion escuchando es esta misma direccion.
Warning
La factoria de protocolos debe estar disponible mientras el Socket esta activo.
74  :
75  Socket(localAddress, Socket::Type::Stream, transportFactory),
76  a_backlog(defaultBacklog),
77  a_sharedBind(sharedBind),
78  a_binderSocket(NULL),
79  a_msBindDelay(DefaultBindDelay) {}
static const Millisecond DefaultBindDelay
Definition: ServerSocket.hpp:43
static const int defaultBacklog
Definition: ServerSocket.hpp:50
Definition: Socket.hpp:49
Socket(const Domain::_v domain, const Type::_v type, TransportFactory *transportFactory=NULL)
Here is the call graph for this function:

◆ ~ServerSocket()

virtual anna::comm::ServerSocket::~ServerSocket ( )
virtual

Destructor.

◆ ServerSocket() [3/3]

anna::comm::ServerSocket::ServerSocket ( const INetAddress localAddress,
const bool  sharedBind,
Type::_v  type,
TransportFactory transportFactory = NULL 
)
inlineprotected

Crea un servidor de socket conectado a la direccion y puerto indicado y con la longitud de cola maxima indicada.

Parameters
transportFactoryFactoria de protocolos de transporte a usar por este sockets.
localAddressPuede ser usado para limitar la direccion por la que atendiende peticiones un servidor de socket instalado en una maquina con mas de una direccion.
sharedBindtrue Si puede haber mas de una aplicacion escuchando es esta misma direccion.
typeTipo de socket.
Warning
La Factoria de protocolos debe estar disponible mientras el Socket esta activo.
227  :
228  Socket(localAddress, type, transportFactory),
229  a_backlog(defaultBacklog),
230  a_sharedBind(false),
231  a_binderSocket(NULL),
232  a_msBindDelay(DefaultBindDelay) {}
static const Millisecond DefaultBindDelay
Definition: ServerSocket.hpp:43
static const int defaultBacklog
Definition: ServerSocket.hpp:50
Socket(const Domain::_v domain, const Type::_v type, TransportFactory *transportFactory=NULL)

Member Function Documentation

◆ accept()

LocalConnection* anna::comm::ServerSocket::accept ( )
noexcept

Comprueba la conexion establecida y acepta las peticiones. Esta funcin puede bloquear al thread que la invoca mientras no llegue una peticion de apertura de conexion si no hemos establecido el modo no-bloqueante del socket. Ver Socket::setBlockingMode.

Cada uno de los socket obtenidos con este Metodo debe ser liberado con release cuando ya no sean necesarios.

Returns
Nueva conexion aceptada, pendiente de pasar los filtros de acceptacion.
Warning
Exclusivamente uso interno.

◆ asString()

virtual std::string anna::comm::ServerSocket::asString ( ) const
virtual

Devuelve una cadena con la informacion referente a este socket.

Returns
Una cadena con la informacion referente a este socket.

Reimplemented from anna::comm::Socket.

◆ asXML()

virtual xml::Node* anna::comm::ServerSocket::asXML ( xml::Node parent) const
virtualnoexcept

Devuelve un nodo XML con la informacion referente a este objeto.

Parameters
parentNodo XML a partir del cual introducir la informacion.
Returns
Un nodo XML con la informacion referente a este objeto.

Reimplemented from anna::comm::Socket.

◆ begin()

iterator anna::comm::ServerSocket::begin ( )
inline

Devuelve un iterador al primer LocalConnection definido.

Returns
un iterador al primer LocalConnection definido.
161 { return a_localConnections.begin(); }

◆ className()

static const char* anna::comm::ServerSocket::className ( )
inlinestatic

Devuelve el nombre logico de esta clase.

Returns
el nombre logico de esta clase.
214 { return "anna::comm::ServerSocket"; }

◆ end()

iterator anna::comm::ServerSocket::end ( )
inline

Devuelve un iterador al ultimo LocalConnection definido.

Returns
un iterador al ultimo LocalConnection definido.
167 { return a_localConnections.end(); }
Here is the call graph for this function:

◆ eventAcceptConnection()

virtual bool anna::comm::ServerSocket::eventAcceptConnection ( const ClientSocket clientSocket)
inlinevirtualnoexcept

Metodo manejador de evento que permite ajustar el funcionamiento cuando el nucleo de anna.comm notifica que ha detectado una peticion de conexion desde un proceso remoto a un ServerSocket asociado al comunicador. Permite independencia de dicho comunicador y complementa el control de aceptacion (por defecto, se devuelve true para no influir en la implementacion del metodo analogo en el comunicador).

Parameters
clientSocketSocket cliente que solicita acceso.
Returns
true si la conexion es acceptada a false en otro caso, en cuyo caso se liberaran automaticamente todos los recursos asociados a la peticion de conexion.
194 { return true; }

◆ getBindDelay()

const Millisecond& anna::comm::ServerSocket::getBindDelay ( )
inline

Devuelve el numero de milisegundos esperado al hacer el bind compartido con este sockets antes de considerar que no se puede atender peticiones en esa direccion.

Returns
el numero de milisegundos esperado al hacer el bind compartido con este sockets antes de considerar que no se puede atender peticiones en esa direccion.
92 { return a_msBindDelay; }

◆ getBinderSocket()

BinderSocket* anna::comm::ServerSocket::getBinderSocket ( )
inline

Devuelve el socket asociado a este socket de bind compartido.

Returns
El socket asociado a este socket de bind compartido. Puede ser NULL.
98 { return a_binderSocket; }

◆ isSharedBind()

bool anna::comm::ServerSocket::isSharedBind ( ) const
inline

Devuelve el modo de asociacion de este socket.

Returns
El modo de asociacion de este socket.
Warning
El valor devuelto por este metodo solo sera valido despues de ejecutar correctamente el metodo bind
106 { return a_sharedBind; }

◆ localConnection()

static LocalConnection* anna::comm::ServerSocket::localConnection ( iterator ii)
inlinestatic

Informa sobre la rotura de una conexion que se creo a partir de un ServerSocket

Parameters
localConnectionSocket que se acepto sobre el server socket y que se ha roto. Devuelve una referencia al contenido apuntado por el iterador.
Returns
una referencia al contenido apuntado por el iterador.
208 { return Recycler<LocalConnection>::data(ii); }
static T * data(iterator ii)
Definition: Recycler.hpp:233
Here is the call graph for this function:

◆ prepare()

virtual void anna::comm::ServerSocket::prepare ( )
virtualnoexcept

Metodo que debemos invocar una vez que el ServerSocket esta establecido.

Warning
Normalmente se invocar�desde Communicator::attach(ServerSocket&,bool)

◆ release()

void anna::comm::ServerSocket::release ( LocalConnection localConnection)
noexcept

Libera los recursos del socket recibido como parametro.

Parameters
localConnectionSocket del que vamos a liberar los recursos. Esta instancia deberia haberse obtenido mediante el Metodo accept, ya que en otro caso los resultados no estan definidos.
Warning
Exclusivamente uso interno.

◆ setBacklog()

void anna::comm::ServerSocket::setBacklog ( const int  backlog)
inline

Establece el tamao de la cola de mensajes.

Parameters
backlogTamao de la cola de mensajes.
112 { a_backlog = backlog; }

◆ setBindDelay()

void anna::comm::ServerSocket::setBindDelay ( const Millisecond bindDelay)
inline

Establece el numero de milisegundos esperado al hacer el bind con este sockets antes de considerar que no se puede realizar la conexion.

Parameters
bindDelaynumero de milisegundos esperado al hacer la conexion con este sockets antes de considerar que no se puede realizar la conexion.
See also
DefaultBindDelay
Warning
Solo tendra efecto en el caso de que el socket tenga activado el modo de 'Bind compartido'.
125 { a_msBindDelay = bindDelay; }
Here is the call graph for this function:

Friends And Related Function Documentation

◆ BinderSocket

friend class BinderSocket
friend

Member Data Documentation

◆ defaultBacklog

const int anna::comm::ServerSocket::defaultBacklog = 30
static

Tamao de la cola de mensajes tomado por defecto.

◆ DefaultBindDelay

const Millisecond anna::comm::ServerSocket::DefaultBindDelay
static

numero de milisegundos por defecto que espera antes de dar por fallida una asociacion a una direccion.


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