const char* IPAddress::getHost () const
{
+ if (!addr) {
+ return NULL;
+ }
+
static char buf [32];
long x = ntohl(addr->sin_addr.s_addr);
sprintf(buf, "%d.%d.%d.%d",
unsigned int IPAddress::getIP () const
{
+ if (!addr) {
+ return 0;
+ }
+
return addr->sin_addr.s_addr;
}
unsigned int IPAddress::getPort() const
{
+ if (!addr) {
+ return 0;
+ }
+
return ntohs(addr->sin_port);
}
void IPAddress::setPort(int port)
{
+ if (!addr) {
+ return;
+ }
+
addr->sin_port = htons(port);
}
unsigned int IPAddress::getFamily () const
{
+ if (!addr) {
+ return 0;
+ }
+
return addr->sin_family;
}
bool IPAddress::getBroadcast () const
{
- return (addr->sin_addr.s_addr == INADDR_BROADCAST);
+ if (!addr) {
+ return false;
+ }
+
+ return (addr->sin_addr.s_addr == INADDR_BROADCAST);
}
unsigned int IPAddress::getAddrLen() const
return (struct sockaddr*) addr;
}
+bool IPAddress::isValid() const
+{
+ return (addr != NULL);
+}
+
Socket::Socket ()
{
handle = -1 ;
IPAddress( const IPAddress& other );
const IPAddress& operator=(const IPAddress& other);
+ bool isValid () const;
void set ( const char* host, int port ) ;
const char* getHost () const ;
unsigned int getPort() const ;
return 0; // not looked up yet, wait longer
}
+ if (!addr.isValid()) {
+ // I'm absuing ENETUNREACH, all we do is pass this to strerror
+ // in handleError
+ handleError (ENETUNREACH);
+ close();
+ return -1;
+ }
+
resolving_host = false;
addr.setPort(port);
int result = Socket::connect ( &addr ) ;