OSDN Git Service

try Ajax-powered popup window of mp4 files on mode=list
[rec10/rec10-git.git] / b25-remote / SmartSock.h
1 // SmartSock.h: CSmartSock クラスのインターフェイス
2 //
3 //////////////////////////////////////////////////////////////////////
4
5 #pragma once
6
7 #include "W2L.h"
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
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
24 // WinSock2タイムアウト対応ラッパークラス        http://2sen.dip.jp/friio/
25 class CSmartSock
26 {
27 public:
28         enum                                    // LastErrorコード
29         {
30                 EC_NOERROR,                     // 正常終了
31                 EC_SOCKERROR,           // ソケットエラー
32                 EC_TIMEOUT,                     // タイムアウト
33                 EC_SOCKINVALID,         // ソケットが無効
34                 EC_PARAMINVALID         // パラメータが無効
35         };
36
37         CSmartSock();
38         virtual ~CSmartSock();
39
40 // TCPソケット
41         const BOOL Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut = 0UL);
42         const BOOL Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut = 0UL);
43
44         const BOOL Listen(const WORD wPort);
45         CSmartSock * Accept(void);
46
47         const BOOL Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);
48         const BOOL Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);
49         const DWORD SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);
50         const DWORD RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);
51
52         const BOOL GetLocalAddr(DWORD *pdwIP, WORD *pwPort = NULL);
53         const BOOL GetPeerAddr(DWORD *pdwIP, WORD *pwPort = NULL);
54
55 // UDPソケット
56         const BOOL Bind(void);
57
58         const DWORD SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);
59         const DWORD SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);
60         const DWORD RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP = NULL, WORD *pwPort = NULL);
61
62         const BOOL Close(void);
63
64         static const DWORD HostToIP(LPCTSTR lpszHost);
65         static const DWORD IPToHost(LPTSTR lpszHost, const DWORD dwIP);
66
67         const DWORD GetLastError(void) const;
68
69 protected:
70         static const BOOL InitWinSock2(void);
71         static const BOOL FreeWinSock2(void);
72
73         enum {SOCKTYPE_NON, SOCKTYPE_TCP, SOCKTYPE_UDP};
74
75         int m_Socket;                           // ソケットハンドル
76         BYTE m_bSockType;                               // ソケットタイプ
77         DWORD m_dwLastError;                    // 最終エラーコード
78         static DWORD dwInstanceNum;             // インスタンスの数
79 };