メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

WBSocket.h

00001 #ifndef WBSOCKET_H
00002 #define WBSOCKET_H
00003 
00004 #include "WBWin.h"
00005 #include <winsock2.h>
00006 #include <ws2tcpip.h>
00007 #include <iostream>
00008 #include <vector>
00009 
00010 class SPR_DLL WBSockAddr{
00011 protected:
00012     SOCKADDR adr;
00013 public:
00014     WBSockAddr();
00015     WBSockAddr(const SOCKADDR& a):adr(a){}
00016     WBSockAddr(const SOCKADDR_IN& a):adr((const SOCKADDR&)a){}
00017     WBSockAddr(const char* adr, int port){Set(adr, port);}
00018     SOCKADDR& Adr(){return adr;}
00019     const SOCKADDR& Adr() const {return adr;}
00020     SOCKADDR_IN& AdrIn(){return (SOCKADDR_IN&)adr;}
00021     const SOCKADDR_IN& AdrIn() const {return (SOCKADDR_IN&)adr;}
00022     operator SOCKADDR&(){return adr;}
00023     operator const SOCKADDR&() const {return adr;}
00024     operator SOCKADDR_IN&(){return (SOCKADDR_IN&)adr;}
00025     operator const SOCKADDR_IN&() const {return (SOCKADDR_IN&)adr;}
00026     operator SOCKADDR*(){return &adr;}
00027     operator const SOCKADDR*() const {return &adr;}
00028     operator SOCKADDR_IN*(){return (SOCKADDR_IN*)&adr;}
00029     operator const SOCKADDR_IN*() const {return (const SOCKADDR_IN*)&adr;}
00030     void Set(const char* adr, int port);
00031     void Print(std::ostream& os) const;
00032     friend bool operator == (const WBSockAddr& a, const WBSockAddr& b);
00033 };
00034 inline std::ostream& operator << (std::ostream& os, const WBSockAddr& w){ w.Print(os); return os; }
00035 inline bool operator == (const WBSockAddr& a, const WBSockAddr& b){
00036     return a.AdrIn().sin_family == b.AdrIn().sin_family
00037         && a.AdrIn().sin_addr.S_un.S_addr == b.AdrIn().sin_addr.S_un.S_addr
00038         && a.AdrIn().sin_port == b.AdrIn().sin_port;
00039 }
00040 
00041 class SPR_DLL WBSocket{
00042     SOCKET sock;
00043     void InitWinsock();
00044 public:
00045     WBSocket(int af=AF_INET, int type=SOCK_DGRAM, int protocol=0);
00046     void Init(int af=AF_INET, int type=SOCK_DGRAM, int protocol=0);
00047     ~WBSocket();
00048     operator SOCKET(){ return sock; }
00049     int SendTo(void* buf, size_t len, const WBSockAddr& a);
00050     bool CanRecv();
00051     int RecvFrom(void* buf, size_t len, WBSockAddr& a);
00052     bool Bind(const WBSockAddr& a);
00053     static char* GetErrorString();
00054     static char* GetErrorString(int errorNum);
00055 };
00056 class SPR_DLL WBNetInterface{
00057 protected:
00058     WBSockAddr addr;
00059     WBSockAddr mask;
00060     WBSockAddr broadcast;
00061 public:
00062     WBNetInterface(const INTERFACE_INFO& info);
00063     const WBSockAddr& Addr(){ return addr; }
00064     const WBSockAddr& Mask(){ return mask; }
00065     const WBSockAddr& Broadcast(){ return broadcast; }
00066     void Print(std::ostream& os) const;
00067 };
00068 inline std::ostream& operator << (std::ostream& os, const WBNetInterface& w){ w.Print(os); return os; }
00069 class SPR_DLL WBNetInterfaces:public std::vector<WBNetInterface>{
00070 protected:
00071 public:
00072     void Init();
00073     void Print(std::ostream& os) const;
00074 };
00075 inline std::ostream& operator << (std::ostream& os, const WBNetInterfaces& w){ w.Print(os); return os; }
00076 #endif

Springheadに対してSun Apr 16 01:57:58 2006に生成されました。  doxygen 1.4.1