OSDN Git Service

stop using trunk or dist directory in rec10 project.
[rec10/rec10-git.git] / dist / trunk / b25-remote / SmartSock.cpp
diff --git a/dist/trunk/b25-remote/SmartSock.cpp b/dist/trunk/b25-remote/SmartSock.cpp
deleted file mode 100755 (executable)
index cbf802c..0000000
+++ /dev/null
@@ -1,572 +0,0 @@
-// 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
-#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
-       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ð
-               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
-       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
-       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
-       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
-               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
-
-       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
-               m_dwLastError = EC_SOCKERROR;
-               return 0UL;\r
-       }\r
-       
-       // \8eó\90M\r
-       int iRef = ::recv(m_Socket, (char *)pBuff, dwMaxLen, 0);\r
-\r
-       if((iRef == SOCKET_ERROR) || !iRef){
-               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
-/*
-       // WinSock2\8aJ\95ú\r
-       return (::WSACleanup())? TRUE : FALSE;\r
-*/
-       return TRUE;
-}\r