139 lines
5.1 KiB
C++
139 lines
5.1 KiB
C++
// sockinet.h -*- C++ -*- socket library
|
|
// Copyright (C) 1992-1996 Gnanasekaran Swaminathan <gs4t@virginia.edu>
|
|
//
|
|
// Permission is granted to use at your own risk and distribute this software
|
|
// in source and binary forms provided the above copyright notice and this
|
|
// paragraph are preserved on all copies. This software is provided "as is"
|
|
// with no express or implied warranty.
|
|
//
|
|
// Version: 12Jan97 1.11
|
|
|
|
#ifndef _SOCKINET_H
|
|
#define _SOCKINET_H
|
|
|
|
#include "sockstream.h"
|
|
#ifndef WIN32
|
|
# include <netinet/in.h>
|
|
#endif // !WIN32
|
|
|
|
class sockinetaddr: public sockAddr, public sockaddr_in
|
|
{
|
|
protected:
|
|
void setport (const char* sn, const char* pn="tcp");
|
|
void setaddr (const char* hn);
|
|
|
|
public:
|
|
~sockinetaddr () {}
|
|
sockinetaddr ();
|
|
sockinetaddr (unsigned long addr, int port_no=0);
|
|
sockinetaddr (const char* host_name, int port_no=0);
|
|
sockinetaddr (unsigned long addr,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
sockinetaddr (const char* host_name,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
sockinetaddr (const sockinetaddr& sina);
|
|
|
|
operator void* () const { return addr_in (); }
|
|
|
|
sockaddr_in* addr_in () const { return (sockaddr_in*) this; }
|
|
int size () const { return sizeof (sockaddr_in); }
|
|
int family() const { return sin_family; }
|
|
sockaddr* addr () const { return (sockaddr*) addr_in (); }
|
|
|
|
int getport () const;
|
|
const char* gethostname() const;
|
|
};
|
|
|
|
class sockinetbuf: public sockbuf
|
|
{
|
|
public:
|
|
enum domain { af_inet = AF_INET };
|
|
|
|
sockinetbuf (const sockbuf::sockdesc& sd);
|
|
sockinetbuf (const sockinetbuf& si): sockbuf (si) {}
|
|
sockinetbuf (sockbuf::type ty, int proto=0);
|
|
sockinetbuf& operator=(const sockinetbuf& si);
|
|
~sockinetbuf () {}
|
|
|
|
sockinetaddr localaddr() const;
|
|
int localport() const;
|
|
const char* localhost() const;
|
|
|
|
sockinetaddr peeraddr() const;
|
|
int peerport() const;
|
|
const char* peerhost() const;
|
|
|
|
void bind_until_success (int portno);
|
|
|
|
virtual void bind (sockAddr& sa);
|
|
void bind (int port_no=0); // addr is assumed to be INADDR_ANY
|
|
// and thus defaults to local host
|
|
|
|
void bind (unsigned long addr, int port_no);
|
|
void bind (const char* host_name, int port_no=0);
|
|
void bind (unsigned long addr,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
void bind (const char* host_name,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
|
|
virtual void connect (sockAddr& sa);
|
|
void connect (unsigned long addr, int port_no);
|
|
void connect (const char* host_name, int port_no);
|
|
void connect (unsigned long addr,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
void connect (const char* host_name,
|
|
const char* service_name,
|
|
const char* protocol_name="tcp");
|
|
|
|
virtual sockdesc accept ();
|
|
virtual sockdesc accept (sockAddr& sa);
|
|
sockdesc accept (unsigned long addr, int port_no);
|
|
sockdesc accept (const char* host_name, int port_no);
|
|
|
|
bool tcpnodelay () const;
|
|
bool tcpnodelay (bool set) const;
|
|
};
|
|
|
|
class isockinet: public isockstream
|
|
{
|
|
public:
|
|
isockinet (const sockbuf::sockdesc& sd);
|
|
isockinet (const sockinetbuf& sb);
|
|
isockinet (sockbuf::type ty=sockbuf::sock_stream, int proto=0);
|
|
~isockinet ();
|
|
|
|
sockinetbuf* rdbuf () { return (sockinetbuf*)ios::rdbuf (); }
|
|
sockinetbuf* operator -> () { return rdbuf (); }
|
|
};
|
|
|
|
class osockinet: public osockstream
|
|
{
|
|
public:
|
|
osockinet (const sockbuf::sockdesc& sd);
|
|
osockinet (const sockinetbuf& sb);
|
|
osockinet (sockbuf::type ty=sockbuf::sock_stream, int proto=0);
|
|
~osockinet ();
|
|
|
|
sockinetbuf* rdbuf () { return (sockinetbuf*)ios::rdbuf (); }
|
|
sockinetbuf* operator -> () { return rdbuf (); }
|
|
};
|
|
|
|
class iosockinet: public iosockstream
|
|
{
|
|
public:
|
|
iosockinet (const sockbuf::sockdesc& sd);
|
|
iosockinet (const sockinetbuf& sb);
|
|
iosockinet (sockbuf::type ty=sockbuf::sock_stream, int proto=0);
|
|
~iosockinet ();
|
|
|
|
sockinetbuf* rdbuf () { return (sockinetbuf*)ios::rdbuf (); }
|
|
sockinetbuf* operator -> () { return rdbuf (); }
|
|
};
|
|
|
|
#endif // _SOCKINET_H
|