This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::BlockingTCPAcceptor Class Reference

#include "blockingTCP.h"

+ Inheritance diagram for epics::pvAccess::BlockingTCPAcceptor:
+ Collaboration diagram for epics::pvAccess::BlockingTCPAcceptor:

Public Member Functions

 POINTER_DEFINITIONS (BlockingTCPAcceptor)
 
 BlockingTCPAcceptor (Context::shared_pointer const &context, ResponseHandler::shared_pointer const &responseHandler, const osiSockAddr &addr, int receiveBufferSize)
 
virtual ~BlockingTCPAcceptor ()
 
const osiSockAddrgetBindAddress ()
 
void destroy ()
 

Detailed Description

Channel Access Server TCP acceptor.

Author
Matej Sekoranja
Version
Id
BlockingTCPAcceptor.java,v 1.1 2010/05/03 14:45:42 mrkraimer Exp

Definition at line 98 of file blockingTCP.h.

Constructor & Destructor Documentation

epics::pvAccess::BlockingTCPAcceptor::BlockingTCPAcceptor ( Context::shared_pointer const &  context,
ResponseHandler::shared_pointer const &  responseHandler,
const osiSockAddr addr,
int  receiveBufferSize 
)

Definition at line 26 of file blockingTCPAcceptor.cpp.

28  :
29  _context(context),
30  _responseHandler(responseHandler),
31  _bindAddress(),
32  _serverSocketChannel(INVALID_SOCKET),
33  _receiveBufferSize(receiveBufferSize),
34  _destroyed(false),
35  _thread(*this, "TCP-acceptor",
39 {
40  _bindAddress = addr;
41  initialize();
42 }
#define INVALID_SOCKET
Definition: osdSock.h:32
#define epicsThreadPriorityMedium
Definition: epicsThread.h:76
#define initialize
Definition: aaiRecord.c:54
LIBCOM_API unsigned int epicsStdCall epicsThreadGetStackSize(epicsThreadStackSizeClass size)
Definition: osdThread.c:466
epics::pvAccess::BlockingTCPAcceptor::~BlockingTCPAcceptor ( )
virtual

Definition at line 44 of file blockingTCPAcceptor.cpp.

Member Function Documentation

void epics::pvAccess::BlockingTCPAcceptor::destroy ( )

Destroy acceptor (stop listening).

Definition at line 231 of file blockingTCPAcceptor.cpp.

231  {
232  SOCKET sock;
233  {
234  Lock guard(_mutex);
235  if(_destroyed) return;
236  _destroyed = true;
237 
238  sock = _serverSocketChannel;
239  _serverSocketChannel = INVALID_SOCKET;
240  }
241 
242  if(sock!=INVALID_SOCKET) {
243  char ipAddrStr[24];
244  ipAddrToDottedIP(&_bindAddress.ia, ipAddrStr, sizeof(ipAddrStr));
245  LOG(logLevelDebug, "Stopped accepting connections at %s.", ipAddrStr);
246 
248  {
250  shutdown(sock, SHUT_RDWR);
251  epicsSocketDestroy(sock);
252  _thread.exitWait();
253  break;
255  LOG(logLevelError, "SigAlarm close not implemented for this target\n");
257  epicsSocketDestroy(sock);
258  _thread.exitWait();
259  break;
260  }
261  }
262 }
LIBCOM_API void epicsStdCall epicsSocketDestroy(SOCKET s)
Definition: osdSock.c:117
#define INVALID_SOCKET
Definition: osdSock.h:32
struct sockaddr_in ia
Definition: osiSock.h:157
enum epicsSocketSystemCallInterruptMechanismQueryInfo epicsSocketSystemCallInterruptMechanismQuery()
A lock for multithreading.
Definition: lock.h:36
#define LOG(level, format,...)
Definition: logger.h:48
int SOCKET
Definition: osdSock.h:31
#define SHUT_RDWR
Definition: osdSock.h:48
unsigned epicsStdCall ipAddrToDottedIP(const struct sockaddr_in *paddr, char *pBuf, unsigned bufSize)
Definition: osiSock.c:144
const osiSockAddr* epics::pvAccess::BlockingTCPAcceptor::getBindAddress ( )
inline

Bind socket address.

Returns
bind socket address, null if not binded.

Definition at line 112 of file blockingTCP.h.

112  {
113  return &_bindAddress;
114  }
epics::pvAccess::BlockingTCPAcceptor::POINTER_DEFINITIONS ( BlockingTCPAcceptor  )

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