now listening.

This commit is contained in:
Maximilian Marx 2008-08-18 23:50:14 +02:00
parent 3250434bb7
commit 7b914f4d6f
2 changed files with 154 additions and 0 deletions

85
socket.cxx Normal file
View File

@ -0,0 +1,85 @@
/**
* xerxes - mysql proxying
* ``Why do you persist in your loneliness?'' --Xerxes
* (c) 2008
* Jan Losinski <losinshi@wh2.tu-dresden.de>
* Maximilian Marx <mmarx@wh2.tu-dresden.de>
*/
#include <stdexcept>
#include <unistd.h>
#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);
}
}

69
socket.hxx Normal file
View File

@ -0,0 +1,69 @@
/**
* xerxes - mysql proxying
* ``Why do you persist in your loneliness?'' --Xerxes
* (c) 2008
* Jan Losinski <losinshi@wh2.tu-dresden.de>
* Maximilian Marx <mmarx@wh2.tu-dresden.de>
*/
#ifndef XERXES_SOCKET_HXX
#define XERXES_SOCKET_HXX
#include <utility>
#include <boost/utility.hpp>
#include <boost/shared_array.hpp>
#include <sys/types.h>
#include <sys/socket.h>
namespace xerxes
{
struct Socket : boost::noncopyable
{
Socket(int domain,
int type,
int protocol);
virtual ~Socket();
int fd;
private:
Socket() {};
};
typedef boost::shared_array<char> buffer_t;
typedef std::pair<buffer_t, int> 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