void chat_server::close_session(const int session_id) { std::cout << "Client Connection Closed: Session ID: " << session_id << std::endl; session_list_[session_id]->Socket().close(); session_queue_.push_back(session_id); if (is_accepting_ == false) { post_accept(); } }
static VALUE my_accept(struct accept_args *a, int force_nonblock) { int client_fd; VALUE client_io; int retried = 0; retry: client_fd = thread_accept(a, force_nonblock); if (client_fd == -1) { switch (errno) { case EAGAIN: if (force_nonblock) return Qnil; a->fd = my_fileno(a->accept_io); set_blocking_or_block(a->fd); #ifdef ECONNABORTED case ECONNABORTED: #endif /* ECONNABORTED */ #ifdef EPROTO case EPROTO: #endif /* EPROTO */ case EINTR: a->fd = my_fileno(a->accept_io); goto retry; case ENOMEM: case EMFILE: case ENFILE: #ifdef ENOBUFS case ENOBUFS: #endif /* ENOBUFS */ if (!retried) { retried = 1; errno = 0; rb_gc(); goto retry; } default: rb_sys_fail("accept"); } } client_io = sock_for_fd(a->accepted_class, client_fd); post_accept(a->accept_io, client_io); if (a->addr) in_addr_set(client_io, (struct sockaddr_storage *)a->addr, *a->addrlen); else rb_ivar_set(client_io, iv_kgio_addr, localhost); return client_io; }
void chat_server::handle_accept( shared_session session, const boost::system::error_code& error) { if (!error) { std::cout << "Client Connection Accepted. SessionID: " << session->session_id() << std::endl; session->init(); session->post_receive(); post_accept(); } else { std::cout << "error No: " << error.value() << " error Message: " << error.message() << std::endl; } }
void chat_server::start() { std::cout << "Initializing Server......" << std::endl; post_accept(); }