mirror of https://github.com/agdsn/xerxes.git
parent
b05046dfac
commit
a88b861089
|
|
@ -235,7 +235,10 @@ namespace xerxes
|
||||||
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
|
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
|
||||||
|
|
||||||
getaddrinfo(opt.hostname.c_str(), opt.port.c_str(), &hints, &res);
|
getaddrinfo(opt.hostname.c_str(), opt.port.c_str(), &hints, &res);
|
||||||
|
|
||||||
|
int so_opt = 1;
|
||||||
|
setsockopt(socket.fd, SOL_SOCKET, SO_REUSEADDR, (char*)&so_opt, sizeof(so_opt));
|
||||||
|
|
||||||
int ret = bind(socket, res->ai_addr, res->ai_addrlen);
|
int ret = bind(socket, res->ai_addr, res->ai_addrlen);
|
||||||
|
|
||||||
freeaddrinfo(res);
|
freeaddrinfo(res);
|
||||||
|
|
|
||||||
54
xerxes.cxx
54
xerxes.cxx
|
|
@ -108,24 +108,54 @@ main(int argc, char* argv[])
|
||||||
if((events[i].data.fd == -1)
|
if((events[i].data.fd == -1)
|
||||||
&& (events[i].events & EPOLLIN))
|
&& (events[i].events & EPOLLIN))
|
||||||
{
|
{
|
||||||
SocketOption dst = vm["dst"].as<SocketOption>();
|
boost::shared_ptr<Socket> target;
|
||||||
boost::shared_ptr<Socket> target(dst.gen_socket());
|
boost::shared_ptr<Socket> source;
|
||||||
if (dst.type == TCP)
|
try
|
||||||
{
|
{
|
||||||
connect_inet(*target, dst);
|
SocketOption dst = vm["dst"].as<SocketOption>();
|
||||||
|
target = boost::shared_ptr<Socket>(dst.gen_socket());
|
||||||
|
if (dst.type == TCP)
|
||||||
|
{
|
||||||
|
connect_inet(*target, dst);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
connect_unix(*target, dst);
|
||||||
|
}
|
||||||
|
sockets[target->fd] = target;
|
||||||
}
|
}
|
||||||
else
|
catch (SocketErr)
|
||||||
{
|
{
|
||||||
connect_unix(*target, dst);
|
continue;
|
||||||
}
|
}
|
||||||
sockets[target->fd] = target;
|
|
||||||
|
|
||||||
// cerr << "accept!" << endl;
|
try
|
||||||
boost::shared_ptr<Socket> source(accept(lstn, 0, 0));
|
{
|
||||||
|
source = boost::shared_ptr<Socket>(accept(lstn, 0, 0));
|
||||||
|
sockets[source->fd] = source;
|
||||||
|
}
|
||||||
|
catch (SocketErr e)
|
||||||
|
{
|
||||||
|
sockets.erase(target->fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
sockets[source->fd] = source;
|
try
|
||||||
|
{
|
||||||
epoll.add(*source, *target);
|
epoll.add(*source, *target);
|
||||||
|
}
|
||||||
|
catch (EpollAddErr e)
|
||||||
|
{
|
||||||
|
if (e.type != EPOLL_ADD_ERR_SOURCE)
|
||||||
|
{
|
||||||
|
epoll.del(target->fd);
|
||||||
|
}
|
||||||
|
epoll.del(target->fd);
|
||||||
|
epoll.del(source->fd);
|
||||||
|
sockets.erase(target->fd);
|
||||||
|
sockets.erase(source->fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue