OSDN Git Service

途中
authorMyun2 <myun2@nwhite.info>
Sun, 13 May 2012 18:48:39 +0000 (03:48 +0900)
committerMyun2 <myun2@nwhite.info>
Sun, 13 May 2012 18:48:39 +0000 (03:48 +0900)
roast/include/roast/windows/socket.hpp

index fbe17e7..d8b644a 100644 (file)
@@ -46,6 +46,11 @@ namespace roast
                                return msg;
                        }
 
+                       void nozero_assert(int code, const char* msg){
+                               if ( code != 0 )
+                                       throw socket_exception(code, ::std::string(msg) + ' ' + get_last_error_msg());
+                       }
+
                public:
                        socket(int af=AF_INET, int type=SOCK_STREAM, int protocol=0)
                                : m_sock(NULL)
@@ -58,8 +63,8 @@ namespace roast
 
                                m_sock = ::socket(af, type, protocol);
 
-                               if ( ::WSAGetLastError() != 0 )
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::socket() ::socket() function was error.");
+                               nozero_assert(::WSAGetLastError(), "roast::socket::socket() ::socket() function was error.");
+
                                if ( m_sock == INVALID_SOCKET )
                                        throw socket_exception(::WSAGetLastError(), "roast::socket::socket() m_sock is INVALID_SOCKET.");
                        }
@@ -76,8 +81,7 @@ namespace roast
                                {
                                        ::closesocket(m_sock);
 
-                                       if ( ::WSAGetLastError() != 0 )
-                                               throw socket_exception(::WSAGetLastError(), "roast::socket::close() ::closesocket() function was error.");
+                                       nozero_assert(::WSAGetLastError(), "roast::socket::close() ::closesocket() function was error.");
 
                                        m_sock = INVALID_SOCKET;
                                }
@@ -102,12 +106,12 @@ namespace roast
 #pragma warning(default: 4996)
 
                                ::addrinfo *addr=NULL;
-                               if ( ::getaddrinfo(host, port_str, &hints, &addr) != 0 )
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::connect() ::getaddrinfo() function was error.");
+                               nozero_assert( ::getaddrinfo(host, port_str, &hints, &addr), "roast::socket::connect() ::getaddrinfo() function was error.");
 
-                               if ( ::connect(m_sock, addr->ai_addr, addr->ai_addrlen) != 0 ){
+                               int code = ::connect(m_sock, addr->ai_addr, addr->ai_addrlen);
+                               if ( code != 0 ){
                                        ::freeaddrinfo(addr);
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::connect() ::connect() function was error.");
+                                       throw socket_exception(::WSAGetLastError(), "roast::socket::connect() ::connect() function was error." + ' ' + get_last_error_msg());
                                }
 
                                ::freeaddrinfo(addr);