OSDN Git Service

d73533936c85d1ad7173dde60670335cdfd93d08
[rec10/rec10-git.git] / dist / trunk / b25-remote / SmartSock.h
1 // SmartSock.h: CSmartSock \83N\83\89\83X\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #pragma once\r
6 \r
7 #include "W2L.h"\r
8 #include <sys/socket.h>
9 #include <fcntl.h>
10 #include <arpa/inet.h>
11 #include <netdb.h>
12 #include <unistd.h>
13 #include <errno.h>
14 \r
15 #define BOOL bool
16 #define LPTSTR char*
17 #define LPCTSTR const char*
18 #define LPCSTR const char*
19 #define BYTE  unsigned char
20 #define WORD  unsigned short
21 #define DWORD unsigned long
22 #define SOCKET int
23 \r
24 // WinSock2\83^\83C\83\80\83A\83E\83g\91Î\89\9e\83\89\83b\83p\81[\83N\83\89\83X       http://2sen.dip.jp/friio/\r
25 class CSmartSock\r
26 {\r
27 public:\r
28         enum                                    // LastError\83R\81[\83h\r
29         {\r
30                 EC_NOERROR,                     // \90³\8fí\8fI\97¹\r
31                 EC_SOCKERROR,           // \83\\83P\83b\83g\83G\83\89\81[\r
32                 EC_TIMEOUT,                     // \83^\83C\83\80\83A\83E\83g\r
33                 EC_SOCKINVALID,         // \83\\83P\83b\83g\82ª\96³\8cø\r
34                 EC_PARAMINVALID         // \83p\83\89\83\81\81[\83^\82ª\96³\8cø\r
35         };\r
36 \r
37         CSmartSock();\r
38         virtual ~CSmartSock();\r
39 \r
40 // TCP\83\\83P\83b\83g\r
41         const BOOL Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut = 0UL);\r
42         const BOOL Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut = 0UL);\r
43 \r
44         const BOOL Listen(const WORD wPort);\r
45         CSmartSock * Accept(void);\r
46 \r
47         const BOOL Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);\r
48         const BOOL Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);\r
49         const DWORD SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);\r
50         const DWORD RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);\r
51 \r
52         const BOOL GetLocalAddr(DWORD *pdwIP, WORD *pwPort = NULL);\r
53         const BOOL GetPeerAddr(DWORD *pdwIP, WORD *pwPort = NULL);\r
54 \r
55 // UDP\83\\83P\83b\83g\r
56         const BOOL Bind(void);\r
57 \r
58         const DWORD SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);\r
59         const DWORD SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);\r
60         const DWORD RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP = NULL, WORD *pwPort = NULL);\r
61 \r
62         const BOOL Close(void);\r
63 \r
64         static const DWORD HostToIP(LPCTSTR lpszHost);\r
65         static const DWORD IPToHost(LPTSTR lpszHost, const DWORD dwIP);\r
66 \r
67         const DWORD GetLastError(void) const;\r
68 \r
69 protected:\r
70         static const BOOL InitWinSock2(void);\r
71         static const BOOL FreeWinSock2(void);\r
72 \r
73         enum {SOCKTYPE_NON, SOCKTYPE_TCP, SOCKTYPE_UDP};\r
74 \r
75         int m_Socket;                           // \83\\83P\83b\83g\83n\83\93\83h\83\8b\r
76         BYTE m_bSockType;                               // \83\\83P\83b\83g\83^\83C\83v\r
77         DWORD m_dwLastError;                    // \8dÅ\8fI\83G\83\89\81[\83R\81[\83h\r
78         static DWORD dwInstanceNum;             // \83C\83\93\83X\83^\83\93\83X\82Ì\90\94\r
79 };\r