--- /dev/null
+// 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
+#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 LPCSTR const char*
+#define BYTE unsigned 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