osg::SocketAddress Class Reference
[Network]

Network address. More...

#include <OSGSocketAddress.h>

List of all members.

Public Types

enum  Type { ANY, BROADCAST, MULTICAST }
typedef struct socketaddr SocketAddrT

Public Member Functions

Constructors


 SocketAddress (const char *host, int port=0)
 SocketAddress (Type type=ANY, int port=0)
 SocketAddress (const SocketAddress &source)
Destructor


virtual ~SocketAddress ()
Get/Set


struct sockaddr * getSockAddr (void) const
int getSockAddrSize (void) const
void setPort (int port)
void setHost (const std::string &host)
int getPort (void) const
std::string getHost (void) const
std::string getHostByName (void) const
Type querry


bool isMulticast (void)
Comparision


void operator= (const SocketAddress &other) const
Comparision


bool operator== (const SocketAddress &other) const
bool operator!= (const SocketAddress &other) const
bool operator< (const SocketAddress &other) const

Protected Attributes

static element


struct sockaddr_in * _sockaddr


Detailed Description

The class SocketAddress holds an ip-address and a socket port number. It is used to connect, and sendTo Sockets.

Usage:

 SocketAddress a("colossus.world.com",3334);
 socket.bind(a);
 cout << a.getHost() << endl;
 cout << a.getPort() << endl;
 

Definition at line 58 of file OSGSocketAddress.h.


Member Typedef Documentation

typedef struct socketaddr osg::SocketAddress::SocketAddrT [read]

Definition at line 71 of file OSGSocketAddress.h.


Member Enumeration Documentation

Enumerator:
ANY 
BROADCAST 
MULTICAST 

Definition at line 64 of file OSGSocketAddress.h.

00064 { ANY,BROADCAST,MULTICAST };


Constructor & Destructor Documentation

SocketAddress::SocketAddress ( const char *  host,
int  port = 0 
)

Constructor. Create a socket address for the given port and host.

Definition at line 89 of file OSGSocketAddress.cpp.

References _sockaddr, setHost(), and setPort().

00089                                                       :
00090     _sockaddr(NULL)
00091 {
00092     _sockaddr = new sockaddr_in;
00093 
00094     memset(_sockaddr,0,sizeof(sockaddr_in));
00095 
00096     _sockaddr->sin_family = AF_INET;
00097 
00098     if(host)
00099         setHost(std::string(host));
00100 
00101     setPort(port);
00102 }

SocketAddress::SocketAddress ( SocketAddress::Type  type = ANY,
int  port = 0 
)

Constructor. Create a socket with predefined type. E.g. ANY is used to bind a socket to all interfaces. BROADCAST chreates a broadcast address

Definition at line 108 of file OSGSocketAddress.cpp.

References _sockaddr, ANY, BROADCAST, osg::osghtonl(), and setPort().

00108                                                             :
00109     _sockaddr(NULL)
00110 {
00111     _sockaddr = new sockaddr_in;
00112 
00113     memset(_sockaddr,0,sizeof(sockaddr_in));
00114 
00115     _sockaddr->sin_family = AF_INET;
00116 
00117     switch(type)
00118     {
00119         case ANY:       _sockaddr->sin_addr.s_addr = osghtonl(INADDR_ANY);
00120                         break;
00121         case BROADCAST: _sockaddr->sin_addr.s_addr = osghtonl(INADDR_BROADCAST);
00122 //            setHost(std::string("192.168.0.255"));
00123                         break;
00124         default:        _sockaddr->sin_addr.s_addr = osghtonl(INADDR_ANY);
00125     }
00126     setPort(port);
00127 }

SocketAddress::SocketAddress ( const SocketAddress source  ) 

copy Constructor

Definition at line 131 of file OSGSocketAddress.cpp.

References _sockaddr.

00131                                                         :
00132     _sockaddr(NULL)
00133 {
00134     _sockaddr = new sockaddr_in;
00135 
00136     *_sockaddr = *(source._sockaddr);
00137 }

SocketAddress::~SocketAddress (  )  [virtual]

Destructor

Definition at line 141 of file OSGSocketAddress.cpp.

References _sockaddr.

00142 {
00143     delete _sockaddr;
00144 }


Member Function Documentation

sockaddr * SocketAddress::getSockAddr ( void   )  const [read]

Get a pointer to the sockaddr struct

Definition at line 226 of file OSGSocketAddress.cpp.

References _sockaddr.

Referenced by osg::StreamSocket::acceptFrom(), osg::Socket::bind(), osg::Socket::connect(), osg::Socket::getAddress(), getHostByName(), osg::DgramSocket::join(), osg::DgramSocket::leave(), osg::DgramSocket::peekFrom(), osg::DgramSocket::recvFrom(), osg::DgramSocket::sendTo(), and osg::DgramSocket::setMCastInterface().

00227 {
00228     return const_cast<struct sockaddr *>(
00229         reinterpret_cast<const struct sockaddr *>(_sockaddr));
00230 }

int SocketAddress::getSockAddrSize ( void   )  const

void SocketAddress::setPort ( int  port  ) 

Set the port number

Definition at line 151 of file OSGSocketAddress.cpp.

References _sockaddr, and osg::osghtons().

Referenced by osg::GroupMCastConnection::initialize(), and SocketAddress().

00152 {
00153     _sockaddr->sin_port = osghtons( port );
00154 }

void SocketAddress::setHost ( const std::string &  host  ) 

Set host name

Definition at line 158 of file OSGSocketAddress.cpp.

References _sockaddr.

Referenced by osg::GroupMCastConnection::initialize(), and SocketAddress().

00159 {
00160     struct hostent *hent;
00161     char const *c;
00162 
00163     // number or name ?
00164     for(c=host.c_str();
00165         *c!='\0' && (isdigit(*c) || *c == '.');
00166         c++);
00167     if(! *c )
00168     {
00169         // inet_aton(const char *cp, struct in_addr *pin);
00170 
00171         // ip number was given
00172         _sockaddr->sin_addr.s_addr = inet_addr(host.c_str());
00173     }
00174     else
00175     {
00176         // get address of host by name
00177         hent = gethostbyname(host.c_str());
00178         if(hent == NULL)
00179         {
00180             throw SocketHostError("gethostbyname()");
00181         }
00182         // set address
00183         _sockaddr->sin_addr = *(struct in_addr *) hent->h_addr;
00184     }
00185 }

int SocketAddress::getPort ( void   )  const

std::string SocketAddress::getHost ( void   )  const

Get host as number std::string

Definition at line 189 of file OSGSocketAddress.cpp.

References _sockaddr.

Referenced by osg::PointSockConnection::bind(), osg::GroupSockConnection::bind(), osg::ClusterWindow::init(), osg::PointMCastConnection::initialize(), osg::GroupMCastConnection::initialize(), and osg::GroupMCastConnection::sendQueue().

00190 {
00191     return std::string(inet_ntoa(_sockaddr->sin_addr));
00192 }

std::string SocketAddress::getHostByName ( void   )  const

Get host as name. If not found, return as number

Definition at line 196 of file OSGSocketAddress.cpp.

References _sockaddr, getSockAddr(), and getSockAddrSize().

00197 {
00198     struct hostent *hent;
00199     std::string result;
00200 
00201     hent=gethostbyaddr((SocketAddrT*)getSockAddr(),
00202                        getSockAddrSize(),AF_INET);
00203     if(hent == NULL)
00204     {
00205         // if no host assigned or host unknown
00206         // then return ip address
00207         result=inet_ntoa(_sockaddr->sin_addr);
00208     }
00209     else
00210     {
00211         result=hent->h_name;
00212     }
00213     return result;
00214 }

bool SocketAddress::isMulticast ( void   ) 

Returns true, if this is a multicast address

Definition at line 218 of file OSGSocketAddress.cpp.

References _sockaddr, and osg::osgntohl().

Referenced by osg::ClusterServer::acceptClient().

00219 {
00220     UInt32 addr = osgntohl(_sockaddr->sin_addr.s_addr);
00221     return addr & 0xC0000;
00222 }

void SocketAddress::operator= ( const SocketAddress other  )  const

Definition at line 249 of file OSGSocketAddress.cpp.

References _sockaddr.

00250 {
00251     if(this != &other)
00252     {
00253         *_sockaddr = *(other._sockaddr);
00254     }
00255 }

bool SocketAddress::operator== ( const SocketAddress other  )  const

compare equal

Definition at line 259 of file OSGSocketAddress.cpp.

References _sockaddr.

00260 {
00261     return _sockaddr->sin_addr.s_addr == other._sockaddr->sin_addr.s_addr &&
00262            _sockaddr->sin_port        == other._sockaddr->sin_port;
00263 }

bool SocketAddress::operator!= ( const SocketAddress other  )  const

compare not equal

Definition at line 267 of file OSGSocketAddress.cpp.

00268 {
00269     return ! (*this == other);
00270 }

bool SocketAddress::operator< ( const SocketAddress other  )  const

compare less

Definition at line 274 of file OSGSocketAddress.cpp.

References _sockaddr.

00275 {
00276     return _sockaddr->sin_addr.s_addr < other._sockaddr->sin_addr.s_addr ||
00277     (
00278         _sockaddr->sin_addr.s_addr == other._sockaddr->sin_addr.s_addr &&
00279         _sockaddr->sin_port        <  other._sockaddr->sin_port
00280     );
00281 }


Member Data Documentation

struct sockaddr_in* osg::SocketAddress::_sockaddr [read, protected]


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

Generated on Mon Mar 17 12:03:56 2008 for OpenSG by  doxygen 1.5.5