mirror of https://github.com/agdsn/xerxes.git
crash on disconnect fixed
This commit is contained in:
parent
28e4ceb2e1
commit
4095408c58
|
|
@ -32,6 +32,11 @@ namespace xerxes
|
||||||
Socket::Socket(int new_fd)
|
Socket::Socket(int new_fd)
|
||||||
{
|
{
|
||||||
fd = new_fd;
|
fd = new_fd;
|
||||||
|
if(fd < 0)
|
||||||
|
{
|
||||||
|
perror("--");
|
||||||
|
throw std::runtime_error("could not create socket.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Socket::~Socket()
|
Socket::~Socket()
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO : Fix crash on disconnect
|
* TODO : Unix Socket testing
|
||||||
* TODO : Do some Error handling
|
* TODO : Do some Error handling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -118,6 +118,7 @@ main(int argc, char* argv[])
|
||||||
connect_inet(*target, dst);
|
connect_inet(*target, dst);
|
||||||
sockets[target->fd] = target;
|
sockets[target->fd] = target;
|
||||||
|
|
||||||
|
cerr << "accept!" << endl;
|
||||||
boost::shared_ptr<Socket> source(accept(lstn, 0, 0));
|
boost::shared_ptr<Socket> source(accept(lstn, 0, 0));
|
||||||
|
|
||||||
sockets[source->fd] = source;
|
sockets[source->fd] = source;
|
||||||
|
|
@ -126,6 +127,11 @@ main(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if(sockets[events[i].data.fd] == 0)
|
||||||
|
{
|
||||||
|
cerr << "already closed, ignore" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
//lookup
|
//lookup
|
||||||
boost::shared_ptr<Socket> target(sockets[events[i].data.fd]);
|
boost::shared_ptr<Socket> target(sockets[events[i].data.fd]);
|
||||||
boost::shared_ptr<Socket> source(sockets[epoll.events[target->fd]->data.fd]);
|
boost::shared_ptr<Socket> source(sockets[epoll.events[target->fd]->data.fd]);
|
||||||
|
|
@ -149,6 +155,7 @@ main(int argc, char* argv[])
|
||||||
epoll.del(source->fd);
|
epoll.del(source->fd);
|
||||||
sockets.erase(target->fd);
|
sockets.erase(target->fd);
|
||||||
sockets.erase(source->fd);
|
sockets.erase(source->fd);
|
||||||
|
cerr << "closed" << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue