diff --git a/socket.cxx b/socket.cxx index f67d5c6..134a0fb 100644 --- a/socket.cxx +++ b/socket.cxx @@ -32,6 +32,11 @@ namespace xerxes Socket::Socket(int new_fd) { fd = new_fd; + if(fd < 0) + { + perror("--"); + throw std::runtime_error("could not create socket."); + } } Socket::~Socket() diff --git a/xerxes.cxx b/xerxes.cxx index cb5a0c7..0e68801 100644 --- a/xerxes.cxx +++ b/xerxes.cxx @@ -7,7 +7,7 @@ */ /** - * TODO : Fix crash on disconnect + * TODO : Unix Socket testing * TODO : Do some Error handling */ @@ -118,6 +118,7 @@ main(int argc, char* argv[]) connect_inet(*target, dst); sockets[target->fd] = target; + cerr << "accept!" << endl; boost::shared_ptr source(accept(lstn, 0, 0)); sockets[source->fd] = source; @@ -126,6 +127,11 @@ main(int argc, char* argv[]) } else { + if(sockets[events[i].data.fd] == 0) + { + cerr << "already closed, ignore" << endl; + continue; + } //lookup boost::shared_ptr target(sockets[events[i].data.fd]); boost::shared_ptr source(sockets[epoll.events[target->fd]->data.fd]); @@ -149,6 +155,7 @@ main(int argc, char* argv[]) epoll.del(source->fd); sockets.erase(target->fd); sockets.erase(source->fd); + cerr << "closed" << endl; continue; } }