mirror of https://github.com/agdsn/xerxes.git
now listening.
This commit is contained in:
parent
3250434bb7
commit
7b914f4d6f
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue