sockinet.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:6k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. // sockinet.h -*- C++ -*- socket library
  2. // Copyright (C) 1992,1993,1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
  3. //
  4. // Permission is granted to use at your own risk and distribute this software
  5. // in source and binary forms provided the above copyright
  6. // notice and this paragraph are preserved on all copies.
  7. // This software is provided "as is" with no express or implied warranty.
  8. //
  9. // Version: 17Oct95 1.10
  10. #ifndef _SOCKINET_H
  11. #define _SOCKINET_H
  12. #include "sockstream.h"
  13. #ifdef _WIN32
  14. #include <winsock.h>
  15. #else
  16. #include <netinet/in.h>
  17. #endif
  18. #define ALLOCATE_STREAMBUF
  19. class SWIUTIL_API_CLASS sockinetaddr: public sockAddr, public sockaddr_in {
  20. protected:
  21.   int setport (const char* sn, const char* pn="tcp");
  22.   int setaddr (const char* hn);
  23.   void herror(const char*) const;
  24. public:
  25.   virtual ~sockinetaddr () {}
  26.   sockinetaddr (const sockinetaddr &);
  27.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  28. VXIunsigned diagTagBase);
  29.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  30. VXIunsigned diagTagBase, unsigned long addr, int port_no=0);
  31.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  32. VXIunsigned diagTagBase, const char* host_name, int port_no=0);
  33.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  34. VXIunsigned diagTagBase, unsigned long addr,
  35.                 const char* service_name, const char* protocol_name="tcp");
  36.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  37. VXIunsigned diagTagBase, const char* host_name,
  38.                 const char* service_name, const char* protocol_name="tcp");
  39.   sockinetaddr (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  40. VXIunsigned diagTagBase, const sockinetaddr& sina);
  41.   operator void* () const { 
  42.     return (void *)(static_cast<const sockaddr_in*>(this)); }
  43.   socklen_t size() const { return sizeof (sockaddr_in); }
  44.   int family() const { return sin_family; }
  45.   sockaddr* addr() const {
  46.     return (sockaddr*)(static_cast<const sockaddr_in*>(this));}
  47.   int getport() const;
  48.   int gethostname(char *hostname, size_t hostnameLen) const;
  49. private:
  50.   // Disable the copy constructor and assignment operator
  51.   sockinetaddr & operator=(const sockinetaddr &);
  52. };
  53. class SWIUTIL_API_CLASS sockinetbuf: public sockbuf
  54. {
  55.  public:
  56.   sockinetbuf& operator=(const sockbuf& si); // needs to be fixed
  57.   sockinetbuf& operator=(const sockinetbuf& si); // needs fixing
  58. public:
  59.   enum domain { af_inet = AF_INET };
  60.   sockinetbuf (const sockbuf& si): sockbuf(si)
  61.   {}
  62.   sockinetbuf (const sockinetbuf& si): sockbuf (si)
  63.   {}
  64.   sockinetbuf (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  65.        VXIunsigned diagTagBase, sockbuf::type ty, int proto=0);
  66.   sockbuf* open (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  67.  VXIunsigned diagTagBase, sockbuf::type, int proto=0);
  68.   sockinetaddr localaddr() const;
  69.   int localport() const;
  70.   int localhost(char *hostname, size_t hostnameLen) const;
  71.   sockinetaddr peeraddr() const;
  72.   int peerport() const;
  73.   int peerhost(char *hostname, size_t hostnameLen) const;
  74.   int bind_until_success (int portno);
  75.   virtual int bind (sockAddr& sa);
  76.   int bind ();
  77.   int bind (unsigned long addr, int port_no=0);
  78.   int bind (const char* host_name, int port_no=0);
  79.   int bind (unsigned long addr,
  80.             const char* service_name,
  81.             const char* protocol_name="tcp");
  82.   int bind (const char* host_name,
  83.             const char* service_name,
  84.             const char* protocol_name="tcp");
  85.   virtual int connect (sockAddr& sa);
  86.   int connect (unsigned long addr, int port_no=0);
  87.   int connect (const char* host_name, int port_no=0);
  88.   int connect (unsigned long addr,
  89.                const char* service_name,
  90.                const char* protocol_name="tcp");
  91.   int connect (const char* host_name,
  92.                const char* service_name,
  93.                const char* protocol_name="tcp");
  94. };
  95. class SWIUTIL_API_CLASS isockinet: public isockstream
  96. {
  97.  public:
  98.   isockinet (const sockbuf& sb);
  99.   isockinet (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  100.      VXIunsigned diagTagBase,
  101.              sockbuf::type ty=sockbuf::sock_stream,
  102.              int proto=0);
  103.   virtual ~isockinet ();
  104.   sockinetbuf* rdbuf () { return static_cast<sockinetbuf*>(ios::rdbuf ()); }
  105.   sockinetbuf* operator -> () { return rdbuf (); }
  106. #ifndef ALLOCATE_STREAMBUF
  107.  private:
  108.   sockinetbuf _mysb;
  109. #endif
  110. private:
  111.   // Disable the copy constructor and assignment operator
  112.   isockinet (const isockinet &);
  113.   isockinet & operator=(const isockinet &);
  114. };
  115. class SWIUTIL_API_CLASS osockinet: public osockstream
  116. {
  117.  public:
  118.   osockinet (const sockbuf& sb);
  119.   osockinet (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  120.      VXIunsigned diagTagBase,
  121.              sockbuf::type ty=sockbuf::sock_stream,
  122.              int proto=0);
  123.   virtual ~osockinet ();
  124.   sockinetbuf* rdbuf () { return static_cast<sockinetbuf*>(ios::rdbuf ()); }
  125.   sockinetbuf* operator -> () { return rdbuf (); }
  126. #ifndef ALLOCATE_STREAMBUF
  127.  private:
  128.   sockinetbuf _mysb;
  129. #endif
  130. private:
  131.   // Disable the copy constructor and assignment operator
  132.   osockinet (const osockinet &);
  133.   osockinet & operator=(const osockinet &);
  134. };
  135. class SWIUTIL_API_CLASS iosockinet: public iosockstream
  136. {
  137.  public:
  138.   iosockinet (const sockbuf& sb);
  139.   iosockinet (const VXIchar *moduleName, VXIlogInterface *pVXILog, 
  140.       VXIunsigned diagTagBase, 
  141.               sockbuf::type ty=sockbuf::sock_stream,
  142.               int proto=0);
  143.   virtual ~iosockinet ();
  144.   sockinetbuf* rdbuf () { return static_cast<sockinetbuf*>(ios::rdbuf ()); }
  145.   sockinetbuf* operator -> () { return rdbuf (); }
  146. #ifndef ALLOCATE_STREAMBUF
  147.  private:
  148.   sockinetbuf _mysb;
  149. #endif
  150. private:
  151.   // Disable the copy constructor and assignment operator
  152.   iosockinet (const iosockinet &);
  153.   iosockinet & operator=(const iosockinet &);
  154. };
  155. #endif // _SOCKINET_H