CvsiTCPwait Class Reference

#include <vsisocket.h>

Public Member Functions

 CvsiTCPwait ()
 ~CvsiTCPwait ()
int Initialize (vsiIPaddress *LocalAddress, int Backlog)
int Close ()
int IsOpen ()
int Accept (CvsiTCPsocket *TCPsocket, vsiIPaddress *Source)

Private Attributes

int m_Socket

Detailed Description

Definition at line 71 of file vsisocket.h.


Constructor & Destructor Documentation

CvsiTCPwait::CvsiTCPwait (  ) 

Definition at line 236 of file vsisocket.cpp.

00237 {
00238     m_Socket = VSI_INVALID_SOCKET;
00239 }

CvsiTCPwait::~CvsiTCPwait (  ) 

Definition at line 241 of file vsisocket.cpp.

00242 {
00243     if(m_Socket != VSI_INVALID_SOCKET)
00244     {
00245         Close();
00246     }
00247 }


Member Function Documentation

int CvsiTCPwait::Accept ( CvsiTCPsocket TCPsocket,
vsiIPaddress Source 
)

Definition at line 329 of file vsisocket.cpp.

00330 {
00331     struct sockaddr_in From;
00332 
00333 
00334     if(m_Socket == VSI_INVALID_SOCKET)
00335     {
00336         return VSI_ERROR_SOCKET_NOT_OPEN;
00337     }
00338 
00339     if(TCPsocket->m_Socket != VSI_INVALID_SOCKET)
00340     {
00341         return VSI_ERROR_SOCKET_INUSE;
00342     }
00343 
00344     unsigned int n= sizeof(From);
00345     int sock = accept( m_Socket, (sockaddr* )&From, &n);
00346 
00347     if(sock < 0)
00348     {
00349         return VSI_ERROR_SOCKET_ACCEPT;
00350     }
00351 
00352     if(Source != 0)
00353     {
00354         Source->Host = From.sin_addr.s_addr;
00355         Source->Port = From.sin_port;
00356     }
00357 
00358     TCPsocket->m_Socket = sock;
00359 
00360     return 0;
00361 }

int CvsiTCPwait::Close ( void   ) 

Definition at line 316 of file vsisocket.cpp.

00317 {
00318     if(m_Socket != VSI_INVALID_SOCKET)
00319     {
00320         close(m_Socket);
00321         m_Socket = VSI_INVALID_SOCKET;
00322         return (0);
00323     }
00324     return VSI_ERROR_SOCKET_NOT_OPEN;
00325 }

int CvsiTCPwait::Initialize ( vsiIPaddress LocalAddress,
int  Backlog 
)

Definition at line 261 of file vsisocket.cpp.

00262 {
00263     int sock;
00264     struct sockaddr_in myaddress;
00265 
00266     if(m_Socket != VSI_INVALID_SOCKET)
00267     {
00268         Close();
00269     }
00270 
00271     // create TCP socket
00272     sock = socket (AF_INET, SOCK_STREAM, 0);
00273     if(sock < 0 )
00274     {
00275         return VSI_ERROR_SOCKET_CREATION;
00276     }
00277 
00278     // ### set SO_REUSEADDR option so can reopen even if old sessions exist
00279     int flag = 1;
00280     int rc = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
00281 
00282     if( rc != 0 )
00283     {
00284         RioErr << "Error on setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, ...): "
00285                << rc << endl;
00286     }
00287 
00288     // Initialize local address
00289     myaddress.sin_family = AF_INET;
00290     myaddress.sin_port = LocalAddress->Port;
00291 
00292     if(LocalAddress->Host == VSI_SOCKET_UNDEFINED_IP_ADDRESS)
00293         myaddress.sin_addr.s_addr = INADDR_ANY;
00294     else
00295         myaddress.sin_addr.s_addr = LocalAddress->Host;
00296 
00297     // bind socket to local IP address
00298     if( bind (sock,(sockaddr *) &myaddress,sizeof(myaddress)) < 0)
00299     {
00300         close (sock);
00301         return VSI_ERROR_SOCKET_BIND;
00302     }
00303 
00304     if( listen (sock, Backlog) < 0)
00305     {
00306         close (sock);
00307         return VSI_ERROR_SOCKET_LISTEN;
00308     }
00309 
00310     m_Socket = sock;
00311     return (0);
00312 }

int CvsiTCPwait::IsOpen (  ) 

Definition at line 251 of file vsisocket.cpp.

00252 {
00253     if(m_Socket == VSI_INVALID_SOCKET)
00254         return false;
00255     else
00256         return true;
00257 }


Field Documentation

int CvsiTCPwait::m_Socket [private]

Definition at line 81 of file vsisocket.h.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:34 2012 for RIO by  doxygen 1.6.3