-// 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; // インスタンスの数
+};