From 7b914f4d6fe7baa73b413175e8383b7227d8a552 Mon Sep 17 00:00:00 2001 From: Maximilian Marx Date: Mon, 18 Aug 2008 23:50:14 +0200 Subject: [PATCH] now listening. --- socket.cxx | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ socket.hxx | 69 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 socket.cxx create mode 100644 socket.hxx diff --git a/socket.cxx b/socket.cxx new file mode 100644 index 0000000..e62ccbf --- /dev/null +++ b/socket.cxx @@ -0,0 +1,85 @@ +/** + * xerxes - mysql proxying + * ``Why do you persist in your loneliness?'' --Xerxes + * (c) 2008 + * Jan Losinski + * Maximilian Marx + */ + +#include +#include +#include "socket.hxx" + +namespace xerxes +{ + Socket::Socket(int protocol, + int type, + int domain) + : fd(socket(protocol, type, domain)) + { + if(fd < 0) + { + throw std::runtime_error("could not create socket."); + } + } + + Socket::~Socket() + { + if(fd) + { + close(fd); + } + } + + MysqlData + makeData(int len) + { + return MysqlData(buffer_t(new char[len]), len); + } + + int + listen(Socket& socket, int backlog) + { + return ::listen(socket.fd, backlog); + } + + int + accept(Socket& socket, + sockaddr* address, + socklen_t* address_len) + { + return ::accept(socket.fd, address, address_len); + } + + int + connect(Socket& socket, + sockaddr const* const serv_addr, + socklen_t addrlen) + { + return ::connect(socket.fd, serv_addr, addrlen); + } + + int + recv(Socket& socket, + MysqlData& data, + int flags) + { + return ::recv(socket.fd, data.first.get(), data.second, flags); + } + + int + send (Socket& socket, + MysqlData& data, + int flags) + { + return ::send(socket.fd, data.first.get(), data.second, flags); + } + + int + bind(Socket& socket, + sockaddr const* const bind_address, + socklen_t addrlen) + { + return ::bind(socket.fd, bind_address, addrlen); + } +} diff --git a/socket.hxx b/socket.hxx new file mode 100644 index 0000000..ac015d7 --- /dev/null +++ b/socket.hxx @@ -0,0 +1,69 @@ +/** + * xerxes - mysql proxying + * ``Why do you persist in your loneliness?'' --Xerxes + * (c) 2008 + * Jan Losinski + * Maximilian Marx + */ + +#ifndef XERXES_SOCKET_HXX +#define XERXES_SOCKET_HXX + +#include +#include +#include +#include +#include + +namespace xerxes +{ + struct Socket : boost::noncopyable + { + Socket(int domain, + int type, + int protocol); + virtual ~Socket(); + + int fd; + + private: + Socket() {}; + }; + + typedef boost::shared_array buffer_t; + typedef std::pair MysqlData; + + MysqlData + makeData(int len); + + int + accept(Socket& socket, + sockaddr* address, + socklen_t* address_len); + + int + listen(Socket& socket, int backlog); + + int + connect(Socket& socket, + sockaddr const* const serv_address, + socklen_t* address_len); + + int + recv(Socket& socket, + MysqlData& data, + int flags); + + int + send(Socket& socket, + MysqlData& data, + int flags); + + int + bind(Socket& socket, + sockaddr const* const bind_address, + socklen_t addrlen); + +} + +#endif