OSDN Git Service

classify : fix DB id undefined.
[rec10/rec10-git.git] / b25-remote / SmartSock.cpp
index cbf802c..c26d33c 100755 (executable)
-// SmartSock.cpp: CSmartSock \83N\83\89\83X\82Ì\83C\83\93\83v\83\8a\83\81\83\93\83e\81[\83V\83\87\83\93\r
-//\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#include "SmartSock.h"\r
+// SmartSock.cpp: CSmartSock クラスのインプリメンテーション
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "SmartSock.h"
 #include <stdio.h>
-#include <sys/time.h>\r
-\r
-#ifdef _DEBUG\r
-#define new DEBUG_NEW\r
-#endif\r
-
-//#pragma warning(disable: 4101) // warning C4101: "\83\8d\81[\83J\83\8b\95Ï\90\94\82Í 1 \93x\82à\8eg\82í\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B"\r
-//#pragma warning(disable: 4996) // warning C4996: "This function or variable may be unsafe. Consider using _wsplitpath_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details"\r
-\r
-\r
-//#pragma comment(lib, "WS2_32")\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////\r
-// \83}\83N\83\8d\92è\8b`\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#define CHECK_FREESOCK(R)      if(m_Socket != INVALID_SOCKET){m_dwLastError = EC_SOCKINVALID; return (R);}\r
-#define CHECK_TCPSOCK(R)       if((m_Socket == INVALID_SOCKET) || (m_bSockType != SOCKTYPE_TCP)){m_dwLastError = EC_SOCKINVALID; return (R);}\r
-#define CHECK_UDPSOCK(R)       if((m_Socket == INVALID_SOCKET) || (m_bSockType != SOCKTYPE_UDP)){m_dwLastError = EC_SOCKINVALID; return (R);}\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////\r
-// \8d\\92z/\8fÁ\96Å\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-DWORD CSmartSock::dwInstanceNum = 0UL;\r
-\r
-CSmartSock::CSmartSock()\r
-       : m_Socket(INVALID_SOCKET)\r
-       , m_bSockType(SOCKTYPE_NON)\r
-       , m_dwLastError(EC_NOERROR)\r
-{\r
-       // WinSock2\8f\89\8aú\89»\r
-       if(!(dwInstanceNum++))InitWinSock2();\r
-}\r
-\r
-CSmartSock::~CSmartSock()\r
-{\r
-       Close();\r
-\r
-       // WinSock2\8aJ\95ú\r
-       if(!(--dwInstanceNum))FreeWinSock2();\r
-}\r
-\r
-const BOOL CSmartSock::Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut)\r
-{\r
-       CHECK_FREESOCK(FALSE);\r
-\r
-       if(!lpszHost){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return FALSE;\r
-               }\r
-               \r
-       // \83A\83h\83\8c\83X\96¼\82©\82çIP\83A\83h\83\8c\83X\8eæ\93¾\r
-       const DWORD dwIP = HostToIP(lpszHost);\r
-\r
-       if(dwIP == INADDR_NONE){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;           \r
-               }\r
-       \r
-       return Connect(dwIP, wPort, dwTimeOut);\r
-}\r
-\r
-const BOOL CSmartSock::Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut)\r
-{\r
-       CHECK_FREESOCK(FALSE);\r
-\r
-       // \83\\83P\83b\83g\8dì\90¬\r
-       if((m_Socket = ::socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;           \r
-               }\r
-\r
-       // \83A\83h\83\8c\83X\90Ý\92è\r
-       SOCKADDR_IN SockAddr;\r
-       SockAddr.sin_family = AF_INET;\r
-       SockAddr.sin_port = htons(wPort);\r
-       SockAddr.sin_addr.s_addr = htonl(dwIP);\r
-\r
-       // \93¯\8aú\83R\83l\83N\83g\r
-       if(!dwTimeOut){\r
-               if(::connect(m_Socket, (PSOCKADDR)&SockAddr, sizeof(sockaddr))){\r
-                       Close();\r
-                       m_dwLastError = EC_SOCKERROR;\r
-                       return FALSE;           \r
-                       }\r
-       \r
-               m_dwLastError = EC_NOERROR;\r
-               return TRUE;\r
-       }\r
-\r
-       // \94ñ\93¯\8aú\83R\83l\83N\83g\r
-       u_long nArg;\r
-       fd_set FdSet;\r
-       struct timeval TimeVal;\r
-       TimeVal.tv_sec = 10UL;\r
+#include <sys/time.h>
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+//#pragma warning(disable: 4101) // warning C4101: "ローカル変数は 1 度も使われていません。"
+//#pragma warning(disable: 4996) // warning C4996: "This function or variable may be unsafe. Consider using _wsplitpath_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details"
+
+
+//#pragma comment(lib, "WS2_32")
+
+
+//////////////////////////////////////////////////////////////////////
+// マクロ定義
+//////////////////////////////////////////////////////////////////////
+
+#define CHECK_FREESOCK(R)      if(m_Socket != INVALID_SOCKET){m_dwLastError = EC_SOCKINVALID; return (R);}
+#define CHECK_TCPSOCK(R)       if((m_Socket == INVALID_SOCKET) || (m_bSockType != SOCKTYPE_TCP)){m_dwLastError = EC_SOCKINVALID; return (R);}
+#define CHECK_UDPSOCK(R)       if((m_Socket == INVALID_SOCKET) || (m_bSockType != SOCKTYPE_UDP)){m_dwLastError = EC_SOCKINVALID; return (R);}
+
+
+//////////////////////////////////////////////////////////////////////
+// 構築/消滅
+//////////////////////////////////////////////////////////////////////
+
+DWORD CSmartSock::dwInstanceNum = 0UL;
+
+CSmartSock::CSmartSock()
+       : m_Socket(INVALID_SOCKET)
+       , m_bSockType(SOCKTYPE_NON)
+       , m_dwLastError(EC_NOERROR)
+{
+       // WinSock2初期化
+       if(!(dwInstanceNum++))InitWinSock2();
+}
+
+CSmartSock::~CSmartSock()
+{
+       Close();
+
+       // WinSock2開放
+       if(!(--dwInstanceNum))FreeWinSock2();
+}
+
+const BOOL CSmartSock::Connect(LPCTSTR lpszHost, const WORD wPort, const DWORD dwTimeOut)
+{
+       CHECK_FREESOCK(FALSE);
+
+       if(!lpszHost){
+               m_dwLastError = EC_PARAMINVALID;
+               return FALSE;
+               }
+               
+       // アドレス名からIPアドレス取得
+       const DWORD dwIP = HostToIP(lpszHost);
+
+       if(dwIP == INADDR_NONE){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;           
+               }
+       
+       return Connect(dwIP, wPort, dwTimeOut);
+}
+
+const BOOL CSmartSock::Connect(const DWORD dwIP, const WORD wPort, const DWORD dwTimeOut)
+{
+       CHECK_FREESOCK(FALSE);
+
+       // ソケット作成
+       if((m_Socket = ::socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;           
+               }
+
+       // アドレス設定
+       SOCKADDR_IN SockAddr;
+       SockAddr.sin_family = AF_INET;
+       SockAddr.sin_port = htons(wPort);
+       SockAddr.sin_addr.s_addr = htonl(dwIP);
+
+       // 同期コネクト
+       if(!dwTimeOut){
+               if(::connect(m_Socket, (PSOCKADDR)&SockAddr, sizeof(sockaddr))){
+                       Close();
+                       m_dwLastError = EC_SOCKERROR;
+                       return FALSE;           
+                       }
+       
+               m_dwLastError = EC_NOERROR;
+               return TRUE;
+       }
+
+       // 非同期コネクト
+       u_long nArg;
+       fd_set FdSet;
+       struct timeval TimeVal;
+       TimeVal.tv_sec = 10UL;
        TimeVal.tv_usec = 0UL;
-       nArg = fcntl(m_Socket, F_GETFL, 0);\r
-       FD_ZERO(&FdSet);\r
-       FD_SET(m_Socket, &FdSet);\r
-\r
-       try{\r
-               // \94ñ\93¯\8aú\82É\90Ø\82è\91Ö\82¦\r
-               if(::fcntl(m_Socket, F_SETFL, nArg | O_NONBLOCK) == SOCKET_ERROR)throw (const DWORD)__LINE__;\r
-\r
-               // \83R\83l\83N\83g\r
-               if(::connect(m_Socket, (PSOCKADDR)&SockAddr, sizeof(sockaddr)) != SOCKET_ERROR)throw (const DWORD)__LINE__;\r
-\r
-               if(errno != EAGAIN && errno != EWOULDBLOCK && errno != EINPROGRESS)throw (const DWORD)__LINE__;\r
-\r
-               // \90Ú\91±\8a®\97¹\91Ò\82¿\r
-               if(!::select(32, NULL, &FdSet, NULL, &TimeVal))throw (const DWORD)__LINE__;\r
-\r
-               // \83^\83C\83\80\83A\83E\83g\94»\92è\r
-               if(!FD_ISSET(m_Socket, &FdSet)){\r
-                       Close();\r
-                       m_dwLastError = EC_TIMEOUT;\r
-                       return FALSE;\r
-                       }\r
-\r
-               // \93¯\8aú\82É\90Ø\82è\91Ö\82¦\r
-               if(::fcntl(m_Socket, F_SETFL, nArg) == SOCKET_ERROR)throw (const DWORD)__LINE__;\r
-               }\r
-       catch(const DWORD dwLine){\r
-               // \83G\83\89\81[\94­\90\r
-               Close();\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       m_bSockType = SOCKTYPE_TCP;\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return TRUE;\r
-}\r
-\r
-const BOOL CSmartSock::Listen(const WORD wPort)\r
-{\r
-       CHECK_FREESOCK(FALSE);\r
-\r
-       // \83\\83P\83b\83g\8dì\90¬\r
-       if((m_Socket = ::socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;           \r
-               }\r
-\r
-       // \83A\83h\83\8c\83X\90Ý\92è\r
-       SOCKADDR_IN SockAddr;\r
-       SockAddr.sin_family = AF_INET;\r
-       SockAddr.sin_port = htons(wPort);\r
-       SockAddr.sin_addr.s_addr = INADDR_ANY;\r
-\r
-       try{\r
-               // \81u\83A\83h\83\8c\83X\8eg\97p\92\86\81v\83G\83\89\81[\82ð\89ñ\94ð
+       nArg = fcntl(m_Socket, F_GETFL, 0);
+       FD_ZERO(&FdSet);
+       FD_SET(m_Socket, &FdSet);
+
+       try{
+               // 非同期に切り替え
+               if(::fcntl(m_Socket, F_SETFL, nArg | O_NONBLOCK) == SOCKET_ERROR)throw (const DWORD)__LINE__;
+
+               // コネクト
+               if(::connect(m_Socket, (PSOCKADDR)&SockAddr, sizeof(sockaddr)) != SOCKET_ERROR)throw (const DWORD)__LINE__;
+
+               if(errno != EAGAIN && errno != EWOULDBLOCK && errno != EINPROGRESS)throw (const DWORD)__LINE__;
+
+               // 接続完了待ち
+               if(!::select(32, NULL, &FdSet, NULL, &TimeVal))throw (const DWORD)__LINE__;
+
+               // タイムアウト判定
+               if(!FD_ISSET(m_Socket, &FdSet)){
+                       Close();
+                       m_dwLastError = EC_TIMEOUT;
+                       return FALSE;
+                       }
+
+               // 同期に切り替え
+               if(::fcntl(m_Socket, F_SETFL, nArg) == SOCKET_ERROR)throw (const DWORD)__LINE__;
+               }
+       catch(const DWORD dwLine){
+               // エラー発生
+               Close();
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       m_bSockType = SOCKTYPE_TCP;
+       m_dwLastError = EC_NOERROR;
+
+       return TRUE;
+}
+
+const BOOL CSmartSock::Listen(const WORD wPort)
+{
+       CHECK_FREESOCK(FALSE);
+
+       // ソケット作成
+       if((m_Socket = ::socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;           
+               }
+
+       // アドレス設定
+       SOCKADDR_IN SockAddr;
+       SockAddr.sin_family = AF_INET;
+       SockAddr.sin_port = htons(wPort);
+       SockAddr.sin_addr.s_addr = INADDR_ANY;
+
+       try{
+               // 「アドレス使用中」エラーを回避
                int on = 1;
                setsockopt(m_Socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
 
-               // \83o\83C\83\93\83h\r
-               if(::bind(m_Socket, (PSOCKADDR)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR)throw (const DWORD)__LINE__;\r
-\r
-               // \90Ú\91±\8eó\82¯\93ü\82ê\r
-               if(::listen(m_Socket, 5) == SOCKET_ERROR)throw (const DWORD)__LINE__;\r
-               }\r
-       catch(const DWORD dwLine){\r
-               // \83G\83\89\81[\94­\90\r
-               Close();\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       m_bSockType = SOCKTYPE_TCP;\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return TRUE;\r
-}\r
-\r
-CSmartSock * CSmartSock::Accept(void)\r
-{\r
-       CHECK_TCPSOCK(FALSE);\r
-       \r
-       SOCKADDR_IN AddrIn;\r
-       memset(&AddrIn, 0, sizeof(AddrIn));\r
-       socklen_t iAddrLen = sizeof(AddrIn);\r
-\r
-       // \83R\83l\83N\83g\8eó\82¯\93ü\82ê\r
-       SOCKET SockIn = ::accept(m_Socket, (sockaddr *)&AddrIn, &iAddrLen);\r
-\r
-       if(SockIn == INVALID_SOCKET){\r
-               Close();\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return NULL;\r
-               }\r
-\r
-       CSmartSock *pNewSock = new CSmartSock;\r
-       pNewSock->m_Socket = SockIn;\r
-       pNewSock->m_bSockType = SOCKTYPE_TCP;\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return pNewSock;\r
-}\r
-\r
-const BOOL CSmartSock::Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut)\r
-{\r
-       CHECK_TCPSOCK(FALSE);\r
-\r
-       if(!pBuff || !dwLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return FALSE;\r
-               }\r
-\r
-       // \8ew\92è\83T\83C\83Y\91\97\90M\r
-       DWORD dwRef = 0UL, dwSend = 0UL;\r
-\r
+               // バインド
+               if(::bind(m_Socket, (PSOCKADDR)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR)throw (const DWORD)__LINE__;
+
+               // 接続受け入れ
+               if(::listen(m_Socket, 5) == SOCKET_ERROR)throw (const DWORD)__LINE__;
+               }
+       catch(const DWORD dwLine){
+               // エラー発生
+               Close();
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       m_bSockType = SOCKTYPE_TCP;
+       m_dwLastError = EC_NOERROR;
+
+       return TRUE;
+}
+
+CSmartSock * CSmartSock::Accept(void)
+{
+       CHECK_TCPSOCK(FALSE);
+       
+       SOCKADDR_IN AddrIn;
+       memset(&AddrIn, 0, sizeof(AddrIn));
+       socklen_t iAddrLen = sizeof(AddrIn);
+
+       // コネクト受け入れ
+       SOCKET SockIn = ::accept(m_Socket, (sockaddr *)&AddrIn, &iAddrLen);
+
+       if(SockIn == INVALID_SOCKET){
+               Close();
+               m_dwLastError = EC_SOCKERROR;
+               return NULL;
+               }
+
+       CSmartSock *pNewSock = new CSmartSock;
+       pNewSock->m_Socket = SockIn;
+       pNewSock->m_bSockType = SOCKTYPE_TCP;
+
+       m_dwLastError = EC_NOERROR;
+
+       return pNewSock;
+}
+
+const BOOL CSmartSock::Send(const BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut)
+{
+       CHECK_TCPSOCK(FALSE);
+
+       if(!pBuff || !dwLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return FALSE;
+               }
+
+       // 指定サイズ送信
+       DWORD dwRef = 0UL, dwSend = 0UL;
+
        do{
                dwRef = SendOnce(pBuff + dwSend, dwLen - dwSend, dwTimeOut);
-               if(!dwRef) return FALSE;\r
-       }\r
-       while((dwSend += dwRef) < dwLen);\r
-\r
-       return TRUE;\r
-}\r
-\r
-const BOOL CSmartSock::Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut)\r
-{\r
-       CHECK_TCPSOCK(FALSE);\r
-\r
-       if(!pBuff || !dwLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return FALSE;\r
-       }\r
-\r
-       // \8ew\92è\83T\83C\83Y\8eó\90M\r
-       DWORD dwRef = 0UL, dwRecv = 0UL;\r
-
-       do{\r
-               if(!(dwRef = RecvOnce(pBuff + dwRecv, dwLen - dwRecv, dwTimeOut)))return FALSE;\r
-       }\r
+               if(!dwRef) return FALSE;
+       }
+       while((dwSend += dwRef) < dwLen);
+
+       return TRUE;
+}
+
+const BOOL CSmartSock::Recv(BYTE *pBuff, const DWORD dwLen, const DWORD dwTimeOut)
+{
+       CHECK_TCPSOCK(FALSE);
+
+       if(!pBuff || !dwLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return FALSE;
+       }
+
+       // 指定サイズ受信
+       DWORD dwRef = 0UL, dwRecv = 0UL;
+
+       do{
+               if(!(dwRef = RecvOnce(pBuff + dwRecv, dwLen - dwRecv, dwTimeOut)))return FALSE;
+       }
        while((dwRecv += dwRef) < dwLen);
-\r
-       return TRUE;\r
-}\r
-\r
-const DWORD CSmartSock::SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut)\r
-{\r
-       CHECK_TCPSOCK(0UL);\r
-\r
-       if(!pBuff || !dwMaxLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return FALSE;\r
-               }\r
-       \r
-       // \83^\83C\83\80\83A\83E\83g\90Ý\92è\r
-       struct timeval stTimeOut;\r
-\r
+
+       return TRUE;
+}
+
+const DWORD CSmartSock::SendOnce(const BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut)
+{
+       CHECK_TCPSOCK(0UL);
+
+       if(!pBuff || !dwMaxLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return FALSE;
+               }
+       
+       // タイムアウト設定
+       struct timeval stTimeOut;
+
        stTimeOut.tv_sec = 10UL;
-       stTimeOut.tv_usec = 0UL;\r
-       if(::setsockopt(m_Socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&stTimeOut, sizeof(struct timeval))){\r
-               Close();\r
+       stTimeOut.tv_usec = 0UL;
+       if(::setsockopt(m_Socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&stTimeOut, sizeof(struct timeval))){
+               Close();
                m_dwLastError = EC_SOCKERROR;
-               return 0UL;\r
-       }\r
-
-       // \91\97\90M\r
-       const int iRef = ::send(m_Socket, (const char *)pBuff, dwMaxLen, 0);\r
-\r
-       if((iRef == SOCKET_ERROR) || !iRef){\r
-               if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS){\r
-                       m_dwLastError = EC_TIMEOUT;\r
-                       return 0UL;\r
-                       }\r
-               else{\r
-                       Close();\r
-                       m_dwLastError = EC_SOCKERROR;\r
-                       return 0UL;\r
-                       }\r
-               }\r
-               \r
-       m_dwLastError = EC_NOERROR;\r
-               \r
-       return (DWORD)iRef;\r
-}\r
-\r
-const DWORD CSmartSock::RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut)\r
-{\r
-       CHECK_TCPSOCK(0UL);\r
-       \r
-       if(!pBuff || !dwMaxLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return FALSE;\r
-               }\r
-\r
-       // \83^\83C\83\80\83A\83E\83g\92l\90Ý\92è\r
-       struct timeval stTimeOut;\r
+               return 0UL;
+       }
+
+       // 送信
+       const int iRef = ::send(m_Socket, (const char *)pBuff, dwMaxLen, 0);
+
+       if((iRef == SOCKET_ERROR) || !iRef){
+               if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS){
+                       m_dwLastError = EC_TIMEOUT;
+                       return 0UL;
+                       }
+               else{
+                       Close();
+                       m_dwLastError = EC_SOCKERROR;
+                       return 0UL;
+                       }
+               }
+               
+       m_dwLastError = EC_NOERROR;
+               
+       return (DWORD)iRef;
+}
+
+const DWORD CSmartSock::RecvOnce(BYTE *pBuff, const DWORD dwMaxLen, const DWORD dwTimeOut)
+{
+       CHECK_TCPSOCK(0UL);
+       
+       if(!pBuff || !dwMaxLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return FALSE;
+               }
+
+       // タイムアウト値設定
+       struct timeval stTimeOut;
 
        stTimeOut.tv_sec = 10UL;
-       stTimeOut.tv_usec = 0UL;\r
-       if(::setsockopt(m_Socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&stTimeOut, sizeof(struct timeval))){\r
-               Close();\r
+       stTimeOut.tv_usec = 0UL;
+       if(::setsockopt(m_Socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&stTimeOut, sizeof(struct timeval))){
+               Close();
                m_dwLastError = EC_SOCKERROR;
-               return 0UL;\r
-       }\r
+               return 0UL;
+       }
        
-       // \8eó\90M\r
-       int iRef = ::recv(m_Socket, (char *)pBuff, dwMaxLen, 0);\r
-\r
-       if((iRef == SOCKET_ERROR) || !iRef){
+       // 受信
+       int iRef = ::recv(m_Socket, (char *)pBuff, dwMaxLen, 0);
+
+       if ( !iRef ) {
+               Close();
+               m_dwLastError = EC_SOCKERROR;
+               return 0UL;
+       }
+
+       if( iRef == SOCKET_ERROR ){
                if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS){
-                       m_dwLastError = EC_TIMEOUT;\r
-                       return 0UL;\r
-                       }\r
-               else{\r
-                       Close();\r
-                       m_dwLastError = EC_SOCKERROR;\r
-                       return 0UL;\r
-                       }\r
-               }\r
-
-       m_dwLastError = EC_NOERROR;\r
-               \r
-       return (DWORD)iRef;\r
-}\r
-\r
-const BOOL CSmartSock::GetLocalAddr(DWORD *pdwIP, WORD *pwPort)\r
-{\r
-       CHECK_TCPSOCK(FALSE);\r
-\r
-       struct sockaddr_in LocalAddr;\r
-       socklen_t AddrLen = sizeof(LocalAddr);\r
-       \r
-       // \83\8d\81[\83J\83\8b\83A\83h\83\8c\83X\8eæ\93¾\r
-       if(::getsockname(m_Socket, (struct sockaddr *)&LocalAddr, &AddrLen) == SOCKET_ERROR){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       if(pdwIP)*pdwIP = htonl(LocalAddr.sin_addr.s_addr);\r
-       if(pwPort)*pwPort = ntohs(LocalAddr.sin_port);\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return TRUE;\r
-}\r
-\r
-const BOOL CSmartSock::GetPeerAddr(DWORD *pIP, WORD *pPort)\r
-{\r
-       CHECK_TCPSOCK(FALSE);\r
-\r
-       struct sockaddr_in PeerAddr;\r
-       socklen_t AddrLen = sizeof(PeerAddr);\r
-       \r
-       // \83s\83A\83A\83h\83\8c\83X\8eæ\93¾\r
-       if(::getpeername(m_Socket, (struct sockaddr *)&PeerAddr, &AddrLen) == SOCKET_ERROR){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       if(pIP)*pIP = htonl(PeerAddr.sin_addr.s_addr);\r
-       if(pPort)*pPort = ntohs(PeerAddr.sin_port);\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return TRUE;\r
-}\r
-\r
-const BOOL CSmartSock::Bind()\r
-{\r
-       CHECK_FREESOCK(FALSE);\r
-\r
-       // UDP\83\\83P\83b\83g\8dì\90¬\r
-       if((m_Socket = ::socket(PF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       // \83A\83h\83\8c\83X\90Ý\92è\r
-       SOCKADDR_IN SockAddr;\r
-       SockAddr.sin_family = AF_INET;\r
-       SockAddr.sin_port = 0U;\r
-       SockAddr.sin_addr.s_addr = INADDR_ANY;\r
-\r
-       // \83o\83C\83\93\83h\r
-       if(::bind(m_Socket, (struct sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR){\r
-               Close();\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return FALSE;\r
-               }\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-       m_bSockType = SOCKTYPE_UDP;\r
-       \r
-       return TRUE;\r
-}\r
-\r
-const DWORD CSmartSock::SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen)\r
-{\r
-       CHECK_UDPSOCK(0UL);\r
-\r
-       if(!pBuff || !dwLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return 0UL;\r
-               }\r
-\r
-       // \83A\83h\83\8c\83X\90Ý\92è\r
-       SOCKADDR_IN SockAddr;\r
-       SockAddr.sin_family = AF_INET;\r
-       SockAddr.sin_port = htons(wPort);\r
-       SockAddr.sin_addr.s_addr = htonl(dwIP);\r
-\r
-       // \91\97\90M\r
-       int iSend = sendto(m_Socket, (const char *)pBuff, dwLen, 0, (struct sockaddr *)&SockAddr, sizeof(SockAddr));\r
-       \r
-       if(iSend == SOCKET_ERROR){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return 0UL;\r
-               }\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return (DWORD)iSend;\r
-}\r
-\r
-const DWORD CSmartSock::SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen)\r
-{\r
-       CHECK_UDPSOCK(0UL);\r
-\r
-       if(!lpszHost || !pBuff || !dwLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return 0UL;\r
-               }\r
-               \r
-       // \83A\83h\83\8c\83X\96¼\82©\82çIP\83A\83h\83\8c\83X\8eæ\93¾\r
-       const DWORD dwIP = HostToIP(lpszHost);\r
-\r
-       if(dwIP == INADDR_NONE){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return 0UL;             \r
-               }\r
-       \r
-       return SendTo(dwIP, wPort, pBuff, dwLen);\r
-}\r
-\r
-const DWORD CSmartSock::RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP, WORD *pwPort)\r
-{\r
-       CHECK_UDPSOCK(0UL);\r
-\r
-       if(!pBuff || !dwLen){\r
-               m_dwLastError = EC_PARAMINVALID;\r
-               return 0UL;\r
-               }\r
-\r
-       // \83A\83h\83\8c\83X\90Ý\92è\r
-       socklen_t iSockSize = sizeof(SOCKADDR_IN);\r
-       SOCKADDR_IN SockAddr;\r
-       SockAddr.sin_family = AF_INET;\r
-       SockAddr.sin_port = 0U;\r
-       SockAddr.sin_addr.s_addr = 0UL;\r
-\r
-       // \8eó\90M\r
-       const int iRecv = ::recvfrom(m_Socket, (char *)pBuff, dwLen, 0, (struct sockaddr *)&SockAddr, &iSockSize);\r
-\r
-       if(iRecv == SOCKET_ERROR){\r
-               m_dwLastError = EC_SOCKERROR;\r
-               return 0UL;\r
-               }\r
-\r
-       if(pdwIP)*pdwIP = SockAddr.sin_addr.s_addr;\r
-       if(pwPort)*pwPort = ntohs(SockAddr.sin_port);\r
-\r
-       m_dwLastError = EC_NOERROR;\r
-\r
-       return (DWORD)iRecv;\r
-}\r
-\r
-const BOOL CSmartSock::Close()\r
-{\r
-       // \83\\83P\83b\83g\83N\83\8d\81[\83Y\r
-       if(m_Socket != INVALID_SOCKET){\r
-               if(m_bSockType == SOCKTYPE_TCP){\r
-                       char byData;\r
-                       ::shutdown(m_Socket, SD_BOTH);\r
-                       while(::recv(m_Socket, &byData, 1, 0) == 1);\r
-                       }\r
-\r
-               ::close(m_Socket);\r
-               m_Socket = INVALID_SOCKET;\r
-               }\r
-       \r
-       m_bSockType = SOCKTYPE_NON;\r
-       m_dwLastError = EC_NOERROR;\r
-       \r
-       return TRUE;\r
-}\r
-\r
-const DWORD CSmartSock::HostToIP(LPCTSTR lpszHost)\r
-{\r
-#ifdef _UNICODE\r
-       char szHost[1024] = {"\0"};\r
-       ::wcstombs(szHost, lpszHost, sizeof(szHost) - 1);\r
-#else\r
-       LPCSTR szHost = lpszHost;\r
-#endif\r
-\r
-       // \83z\83X\83g\96¼\82©\82çIP\83A\83h\83\8c\83X\8eæ\93¾\r
-       const DWORD dwIP = ::inet_addr(szHost);\r
-\r
-       if(dwIP == INADDR_NONE){\r
-               struct hostent *pHost = ::gethostbyname(szHost);\r
-               if(!pHost){             \r
-                       return INADDR_NONE;\r
-                       }\r
-               else return *((DWORD *)pHost->h_addr_list[0]);\r
-               }\r
-       else return htonl(dwIP);\r
-}\r
-\r
-const DWORD CSmartSock::IPToHost(LPTSTR lpszHost, const DWORD dwIP)\r
-{\r
-       if(!lpszHost)return FALSE;\r
-\r
-       // IP\83A\83h\83\8c\83X\82©\82ç\83z\83X\83g\96¼\8eæ\93¾\r
-       const DWORD dwNetIP = htonl(dwIP);\r
-       struct hostent *pHost = ::gethostbyaddr((const char *)&dwNetIP, sizeof(dwNetIP), AF_INET);\r
-       if(!pHost)return FALSE;\r
-\r
-#ifdef _UNICODE\r
-       ::mbstowcs(lpszHost, pHost->h_name, ::lstrlenA(pHost->h_name));\r
-#else\r
-       ::strcpy(lpszHost, pHost->h_name);\r
-#endif\r
-\r
-       return ::strlen(lpszHost);\r
-}\r
-\r
-const DWORD CSmartSock::GetLastError() const\r
-{\r
-       // \8dÅ\8cã\82É\94­\90\82µ\82½\83G\83\89\81[\82ð\95Ô\82·\r
-       return m_dwLastError;\r
-}\r
-\r
-const BOOL CSmartSock::InitWinSock2(void)\r
-{\r
-#ifdef _UNICODE\r
-       ::setlocale(LC_ALL, "japanese");\r
-#endif\r
-/*\r
-       WSADATA WsaData;\r
-\r
-       // WinSock2\8f\89\8aú\89»\r
-       if(::WSAStartup(MAKEWORD(2, 2), &WsaData))return FALSE;\r
-\r
-       if((LOBYTE(WsaData.wVersion) != 2U) || (HIBYTE(WsaData.wVersion) != 2U))return FALSE;\r
-*/\r
-       return TRUE;\r
-}\r
-\r
-const BOOL CSmartSock::FreeWinSock2(void)\r
-{\r
+                       m_dwLastError = EC_TIMEOUT;
+                       return 0UL;
+                       }
+               else{
+                       Close();
+                       m_dwLastError = EC_SOCKERROR;
+                       return 0UL;
+                       }
+               }
+
+       m_dwLastError = EC_NOERROR;
+               
+       return (DWORD)iRef;
+}
+
+const BOOL CSmartSock::GetLocalAddr(DWORD *pdwIP, WORD *pwPort)
+{
+       CHECK_TCPSOCK(FALSE);
+
+       struct sockaddr_in LocalAddr;
+       socklen_t AddrLen = sizeof(LocalAddr);
+       
+       // ローカルアドレス取得
+       if(::getsockname(m_Socket, (struct sockaddr *)&LocalAddr, &AddrLen) == SOCKET_ERROR){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       if(pdwIP)*pdwIP = htonl(LocalAddr.sin_addr.s_addr);
+       if(pwPort)*pwPort = ntohs(LocalAddr.sin_port);
+
+       m_dwLastError = EC_NOERROR;
+
+       return TRUE;
+}
+
+const BOOL CSmartSock::GetPeerAddr(DWORD *pIP, WORD *pPort)
+{
+       CHECK_TCPSOCK(FALSE);
+
+       struct sockaddr_in PeerAddr;
+       socklen_t AddrLen = sizeof(PeerAddr);
+       
+       // ピアアドレス取得
+       if(::getpeername(m_Socket, (struct sockaddr *)&PeerAddr, &AddrLen) == SOCKET_ERROR){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       if(pIP)*pIP = htonl(PeerAddr.sin_addr.s_addr);
+       if(pPort)*pPort = ntohs(PeerAddr.sin_port);
+
+       m_dwLastError = EC_NOERROR;
+
+       return TRUE;
+}
+
+const BOOL CSmartSock::Bind()
+{
+       CHECK_FREESOCK(FALSE);
+
+       // UDPソケット作成
+       if((m_Socket = ::socket(PF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET){
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       // アドレス設定
+       SOCKADDR_IN SockAddr;
+       SockAddr.sin_family = AF_INET;
+       SockAddr.sin_port = 0U;
+       SockAddr.sin_addr.s_addr = INADDR_ANY;
+
+       // バインド
+       if(::bind(m_Socket, (struct sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR){
+               Close();
+               m_dwLastError = EC_SOCKERROR;
+               return FALSE;
+               }
+
+       m_dwLastError = EC_NOERROR;
+       m_bSockType = SOCKTYPE_UDP;
+       
+       return TRUE;
+}
+
+const DWORD CSmartSock::SendTo(const DWORD dwIP, const WORD wPort, const BYTE *pBuff, const DWORD dwLen)
+{
+       CHECK_UDPSOCK(0UL);
+
+       if(!pBuff || !dwLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return 0UL;
+               }
+
+       // アドレス設定
+       SOCKADDR_IN SockAddr;
+       SockAddr.sin_family = AF_INET;
+       SockAddr.sin_port = htons(wPort);
+       SockAddr.sin_addr.s_addr = htonl(dwIP);
+
+       // 送信
+       int iSend = sendto(m_Socket, (const char *)pBuff, dwLen, 0, (struct sockaddr *)&SockAddr, sizeof(SockAddr));
+       
+       if(iSend == SOCKET_ERROR){
+               m_dwLastError = EC_SOCKERROR;
+               return 0UL;
+               }
+
+       m_dwLastError = EC_NOERROR;
+
+       return (DWORD)iSend;
+}
+
+const DWORD CSmartSock::SendTo(LPCTSTR lpszHost, const WORD wPort, const BYTE *pBuff, const DWORD dwLen)
+{
+       CHECK_UDPSOCK(0UL);
+
+       if(!lpszHost || !pBuff || !dwLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return 0UL;
+               }
+               
+       // アドレス名からIPアドレス取得
+       const DWORD dwIP = HostToIP(lpszHost);
+
+       if(dwIP == INADDR_NONE){
+               m_dwLastError = EC_SOCKERROR;
+               return 0UL;             
+               }
+       
+       return SendTo(dwIP, wPort, pBuff, dwLen);
+}
+
+const DWORD CSmartSock::RecvFrom(BYTE *pBuff, const DWORD dwLen, DWORD *pdwIP, WORD *pwPort)
+{
+       CHECK_UDPSOCK(0UL);
+
+       if(!pBuff || !dwLen){
+               m_dwLastError = EC_PARAMINVALID;
+               return 0UL;
+               }
+
+       // アドレス設定
+       socklen_t iSockSize = sizeof(SOCKADDR_IN);
+       SOCKADDR_IN SockAddr;
+       SockAddr.sin_family = AF_INET;
+       SockAddr.sin_port = 0U;
+       SockAddr.sin_addr.s_addr = 0UL;
+
+       // 受信
+       const int iRecv = ::recvfrom(m_Socket, (char *)pBuff, dwLen, 0, (struct sockaddr *)&SockAddr, &iSockSize);
+
+       if(iRecv == SOCKET_ERROR){
+               m_dwLastError = EC_SOCKERROR;
+               return 0UL;
+               }
+
+       if(pdwIP)*pdwIP = SockAddr.sin_addr.s_addr;
+       if(pwPort)*pwPort = ntohs(SockAddr.sin_port);
+
+       m_dwLastError = EC_NOERROR;
+
+       return (DWORD)iRecv;
+}
+
+const BOOL CSmartSock::Close()
+{
+       // ソケットクローズ
+       if(m_Socket != INVALID_SOCKET){
+               if(m_bSockType == SOCKTYPE_TCP){
+                       char byData;
+                       ::shutdown(m_Socket, SD_BOTH);
+                       while(::recv(m_Socket, &byData, 1, 0) == 1);
+                       }
+
+               ::close(m_Socket);
+               m_Socket = INVALID_SOCKET;
+               }
+       
+       m_bSockType = SOCKTYPE_NON;
+       m_dwLastError = EC_NOERROR;
+       
+       return TRUE;
+}
+
+const DWORD CSmartSock::HostToIP(LPCTSTR lpszHost)
+{
+#ifdef _UNICODE
+       char szHost[1024] = {"\0"};
+       ::wcstombs(szHost, lpszHost, sizeof(szHost) - 1);
+#else
+       LPCSTR szHost = lpszHost;
+#endif
+
+       // ホスト名からIPアドレス取得
+       const DWORD dwIP = ::inet_addr(szHost);
+
+       if(dwIP == INADDR_NONE){
+               struct hostent *pHost = ::gethostbyname(szHost);
+               if(!pHost){             
+                       return INADDR_NONE;
+                       }
+               else return *((DWORD *)pHost->h_addr_list[0]);
+               }
+       else return htonl(dwIP);
+}
+
+const DWORD CSmartSock::IPToHost(LPTSTR lpszHost, const DWORD dwIP)
+{
+       if(!lpszHost)return FALSE;
+
+       // IPアドレスからホスト名取得
+       const DWORD dwNetIP = htonl(dwIP);
+       struct hostent *pHost = ::gethostbyaddr((const char *)&dwNetIP, sizeof(dwNetIP), AF_INET);
+       if(!pHost)return FALSE;
+
+#ifdef _UNICODE
+       ::mbstowcs(lpszHost, pHost->h_name, ::lstrlenA(pHost->h_name));
+#else
+       ::strcpy(lpszHost, pHost->h_name);
+#endif
+
+       return ::strlen(lpszHost);
+}
+
+const DWORD CSmartSock::GetLastError() const
+{
+       // 最後に発生したエラーを返す
+       return m_dwLastError;
+}
+
+const BOOL CSmartSock::InitWinSock2(void)
+{
+#ifdef _UNICODE
+       ::setlocale(LC_ALL, "japanese");
+#endif
+/*
+       WSADATA WsaData;
+
+       // WinSock2初期化
+       if(::WSAStartup(MAKEWORD(2, 2), &WsaData))return FALSE;
+
+       if((LOBYTE(WsaData.wVersion) != 2U) || (HIBYTE(WsaData.wVersion) != 2U))return FALSE;
+*/
+       return TRUE;
+}
+
+const BOOL CSmartSock::FreeWinSock2(void)
+{
 /*
-       // WinSock2\8aJ\95ú\r
-       return (::WSACleanup())? TRUE : FALSE;\r
+       // WinSock2開放
+       return (::WSACleanup())? TRUE : FALSE;
 */
        return TRUE;
-}\r
+}