OSDN Git Service

fix memory leak, thanks to Valgrind
[rec10/rec10-git.git] / b25-remote / SmartSock.h
index d735339..057e7b3 100755 (executable)
@@ -1,17 +1,17 @@
-// SmartSock.h: CSmartSock \83N\83\89\83X\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\r
-//\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#pragma once\r
-\r
-#include "W2L.h"\r
+// SmartSock.h: CSmartSock クラスのインターフェイス
+//
+//////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include "W2L.h"
 #include <sys/socket.h>
 #include <fcntl.h>
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <unistd.h>
 #include <errno.h>
-\r
+
 #define BOOL bool
 #define LPTSTR char*
 #define LPCTSTR const char*
 #define WORD  unsigned short
 #define DWORD unsigned long
 #define SOCKET int
-\r
-// 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
-class CSmartSock\r
-{\r
-public:\r
-       enum                                    // LastError\83R\81[\83h\r
-       {\r
-               EC_NOERROR,                     // \90³\8fí\8fI\97¹\r
-               EC_SOCKERROR,           // \83\\83P\83b\83g\83G\83\89\81[\r
-               EC_TIMEOUT,                     // \83^\83C\83\80\83A\83E\83g\r
-               EC_SOCKINVALID,         // \83\\83P\83b\83g\82ª\96³\8cø\r
-               EC_PARAMINVALID         // \83p\83\89\83\81\81[\83^\82ª\96³\8cø\r
-       };\r
-\r
-       CSmartSock();\r
-       virtual ~CSmartSock();\r
-\r
-// TCP\83\\83P\83b\83g\r
-       const BOOL Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut = 0UL);\r
-       const BOOL Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut = 0UL);\r
-\r
-       const BOOL Listen(const WORD wPort);\r
-       CSmartSock * Accept(void);\r
-\r
-       const BOOL Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);\r
-       const BOOL Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);\r
-       const DWORD SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);\r
-       const DWORD RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);\r
-\r
-       const BOOL GetLocalAddr(DWORD *pdwIP, WORD *pwPort = NULL);\r
-       const BOOL GetPeerAddr(DWORD *pdwIP, WORD *pwPort = NULL);\r
-\r
-// UDP\83\\83P\83b\83g\r
-       const BOOL Bind(void);\r
-\r
-       const DWORD SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);\r
-       const DWORD SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);\r
-       const DWORD RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP = NULL, WORD *pwPort = NULL);\r
-\r
-       const BOOL Close(void);\r
-\r
-       static const DWORD HostToIP(LPCTSTR lpszHost);\r
-       static const DWORD IPToHost(LPTSTR lpszHost, const DWORD dwIP);\r
-\r
-       const DWORD GetLastError(void) const;\r
-\r
-protected:\r
-       static const BOOL InitWinSock2(void);\r
-       static const BOOL FreeWinSock2(void);\r
-\r
-       enum {SOCKTYPE_NON, SOCKTYPE_TCP, SOCKTYPE_UDP};\r
-\r
-       int m_Socket;                           // \83\\83P\83b\83g\83n\83\93\83h\83\8b\r
-       BYTE m_bSockType;                               // \83\\83P\83b\83g\83^\83C\83v\r
-       DWORD m_dwLastError;                    // \8dÅ\8fI\83G\83\89\81[\83R\81[\83h\r
-       static DWORD dwInstanceNum;             // \83C\83\93\83X\83^\83\93\83X\82Ì\90\94\r
-};\r
+
+// WinSock2タイムアウト対応ラッパークラス       http://2sen.dip.jp/friio/
+class CSmartSock
+{
+public:
+       enum                                    // LastErrorコード
+       {
+               EC_NOERROR,                     // 正常終了
+               EC_SOCKERROR,           // ソケットエラー
+               EC_TIMEOUT,                     // タイムアウト
+               EC_SOCKINVALID,         // ソケットが無効
+               EC_PARAMINVALID         // パラメータが無効
+       };
+
+       CSmartSock();
+       virtual ~CSmartSock();
+
+// TCPソケット
+       const BOOL Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut = 0UL);
+       const BOOL Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut = 0UL);
+
+       const BOOL Listen(const WORD wPort);
+       CSmartSock * Accept(void);
+
+       const BOOL Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);
+       const BOOL Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut = 0UL);
+       const DWORD SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);
+       const DWORD RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut = 0UL);
+
+       const BOOL GetLocalAddr(DWORD *pdwIP, WORD *pwPort = NULL);
+       const BOOL GetPeerAddr(DWORD *pdwIP, WORD *pwPort = NULL);
+
+// UDPソケット
+       const BOOL Bind(void);
+
+       const DWORD SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);
+       const DWORD SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen);
+       const DWORD RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP = NULL, WORD *pwPort = NULL);
+
+       const BOOL Close(void);
+
+       static const DWORD HostToIP(LPCTSTR lpszHost);
+       static const DWORD IPToHost(LPTSTR lpszHost, const DWORD dwIP);
+
+       const DWORD GetLastError(void) const;
+
+protected:
+       static const BOOL InitWinSock2(void);
+       static const BOOL FreeWinSock2(void);
+
+       enum {SOCKTYPE_NON, SOCKTYPE_TCP, SOCKTYPE_UDP};
+
+       int m_Socket;                           // ソケットハンドル
+       BYTE m_bSockType;                               // ソケットタイプ
+       DWORD m_dwLastError;                    // 最終エラーコード
+       static DWORD dwInstanceNum;             // インスタンスの数
+};