Ejemplo n.º 1
0
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();
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
	}
}
Ejemplo n.º 4
0
void chat_server::start()
{
	std::cout << "Initializing Server......" << std::endl;
	post_accept();
}