OSDN Git Service

unix/socket_impl.hpp: 大体直して、みた、ような…?
authormyun2 <myun2@nwhite.info>
Mon, 9 Jul 2012 00:38:13 +0000 (09:38 +0900)
committermyun2 <myun2@nwhite.info>
Mon, 9 Jul 2012 00:38:13 +0000 (09:38 +0900)
roast/include/roast/unix/socket_impl.hpp

index 77827ef..adea128 100644 (file)
@@ -8,16 +8,16 @@
 #include "roast/io/socket/socket_base.hpp"
 #include <stdio.h>     //      sprintf
 #include <string>
-#include <ws2tcpip.h>
-#include <Wspiapi.h>
-#include <winsock2.h>
-#pragma comment(lib, "ws2_32.lib")
 
-#include "roast/windows/socket_startup.hpp"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
 
 namespace roast
 {
-       namespace windows
+       namespace unix
        {
                ////////////////////////////////////////////////////////////////////////////////
 
@@ -25,7 +25,7 @@ namespace roast
                {
                public:
                        //      Types:
-                       typedef ::SOCKET handler_type, sock_type, socket_type;
+                       typedef int handler_type, sock_type, socket_type;
                        
                        struct open_params_type {
                                int af;
@@ -70,7 +70,7 @@ namespace roast
                        
                private:
                        //      Private Methods
-                       static ::std::string get_last_error_msg()
+                       /*static ::std::string get_last_error_msg()
                        {
                                char *msg_buf;
                                ::FormatMessageA(       FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
@@ -81,14 +81,14 @@ namespace roast
                                        ::LocalFree(msg_buf);
                                }
                                return msg;
-                       }
+                       }*/
                        
                        static void nozero_assert(int code, const char* msg){
                                if ( code != 0 )
-                                       throw socket_exception(::std::string(msg) + ' ' + get_last_error_msg(), code);
+                                       throw socket_exception(::std::string(msg) /*+ ' ' + get_last_error_msg()*/, code);
                        }
                        static void lasterr_assert(const char* msg){
-                               nozero_assert(::WSAGetLastError(), msg);
+                               nozero_assert(errno, msg);
                        }
 
                        //      Private Classes
@@ -110,7 +110,7 @@ namespace roast
 
                                        nozero_assert(
                                                ::getaddrinfo(host, port_str, &hints, &data),
-                                               "roast::windows::socket::addr() ::getaddrinfo() function was error.");
+                                               "roast::unix::socket::addr() ::getaddrinfo() function was error.");
 
                                }
                                virtual ~addr(){
@@ -131,7 +131,7 @@ namespace roast
                        //      Implement Methods
                        static handler_type create(const open_params_type& params){
                                sock_type sock = ::socket(params.af, params.type, params.protocol);
-                               lasterr_assert("roast::windows::socket::create() ::socket() function was error.");
+                               lasterr_assert("roast::unix::socket::create() ::socket() function was error.");
                                return sock;
                        }
                        
@@ -150,27 +150,27 @@ namespace roast
                        {
                                nozero_assert(
                                        ::closesocket(handler),
-                                       "roast::windows::socket::close() ::closesocket() function was error.");
+                                       "roast::unix::socket::close() ::closesocket() function was error.");
                        }
                        
                        void shutdown(handler_type handler, int how=3)
                        {
                                nozero_assert(
                                        ::shutdown(handler, how),
-                                       "roast::windows::socket::close() ::closesocket() function was error.");
+                                       "roast::unix::socket::close() ::closesocket() function was error.");
                        }
                        
                        void listen(handler_type handler, int max_queueing=SOMAXCONN)
                        {
                                nozero_assert(
                                        ::listen(handler, max_queueing),
-                                       "roast::windows::socket::listen() ::listen() function was error.");
+                                       "roast::unix::socket::listen() ::listen() function was error.");
                        }
                        
                        handler_type accept(handler_type handler, ::sockaddr* addr_out=NULL, int* len_out=NULL)
                        {
-                               ::SOCKET accepted_socket = ::accept(handler, addr_out, len_out);
-                               nozero_assert(::WSAGetLastError(), "roast::socket::accept() ::accept() function was error.");
+                               handler_type accepted_socket = ::accept(handler, addr_out, len_out);
+                               nozero_assert(errno, "roast::socket::accept() ::accept() function was error.");
                                return accepted_socket;
                        }
                        
@@ -183,13 +183,13 @@ namespace roast
                        static int read(handler_type handler, void* buf, size_t size, int flag)
                        {
                                int ret = ::recv(handler, (char*)buf, size, flag);
-                               lasterr_assert("roast::windows::socket::read() ::recv() function was error.");
+                               lasterr_assert("roast::unix::socket::read() ::recv() function was error.");
                                return ret;
                        }
                        static int write(handler_type handler, const void* buf, size_t size, int flag)
                        {
                                int ret = ::send(handler, (const char*)buf, size, flag);
-                               lasterr_assert("roast::windows::socket::write() ::send() function was error.");
+                               lasterr_assert("roast::unix::socket::write() ::send() function was error.");
                                return ret;
                        }
 
@@ -222,10 +222,10 @@ namespace roast
 
                                m_sock = ::socket(af, type, protocol);
 
-                               nozero_assert(::WSAGetLastError(), "roast::socket::socket() ::socket() function was error.");
+                               nozero_assert(errno, "roast::socket::socket() ::socket() function was error.");
 
                                if ( m_sock == INVALID_SOCKET )
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::socket() m_sock is INVALID_SOCKET.");
+                                       throw socket_exception(errno, "roast::socket::socket() m_sock is INVALID_SOCKET.");
                        }
 
 
@@ -237,7 +237,7 @@ namespace roast
                                //close();
 
                                if ( m_sock != INVALID_SOCKET && m_opened )
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::connect() Socket was already opened.");
+                                       throw socket_exception(errno, "roast::socket::connect() Socket was already opened.");
                                
                                ::addrinfo hints;
                                ::memset(&hints, 0, sizeof(hints));
@@ -272,7 +272,7 @@ namespace roast
                        void bind(int port, const char* host="0.0.0.0")
                        {
                                if ( m_sock != INVALID_SOCKET && m_opened )
-                                       throw socket_exception(::WSAGetLastError(), "roast::socket::bind() Socket was already binded.");
+                                       throw socket_exception(errno, "roast::socket::bind() Socket was already binded.");
                                
                                ::addrinfo hints;
                                ::memset(&hints, 0, sizeof(hints));