#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
{
////////////////////////////////////////////////////////////////////////////////
{
public:
// Types:
- typedef ::SOCKET handler_type, sock_type, socket_type;
+ typedef int handler_type, sock_type, socket_type;
struct open_params_type {
int af;
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,
::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
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(){
// 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;
}
{
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;
}
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;
}
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.");
}
//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));
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));