Example #1
0
	void on_read_avail(Poseidon::StreamBuffer data) override {
		LOG_POSEIDON_INFO("Connection read avail: remote = ", get_remote_info(),
			", data = ", data.dump());

		Poseidon::StreamBuffer buffer;
		buffer.put("[Response from echo server] ");
		buffer.splice(data);
		send(std::move(buffer));

		set_timeout(g_keep_alive_timeout);
	}
Example #2
0
void TcpClientBase::realConnect(bool useSsl){
	if(::connect(m_socket.get(), static_cast<const ::sockaddr *>(SockAddr::getData()), SockAddr::getSize()) != 0){
		if(errno != EINPROGRESS){
			DEBUG_THROW(SystemException);
		}
	}
	if(useSsl){
		LOG_POSEIDON_INFO("Initiating SSL handshake...");

		AUTO(ssl, g_clientSslFactory.createSsl());
		boost::scoped_ptr<SslFilterBase> filter(new SslFilter(STD_MOVE(ssl), getFd()));
		initSsl(STD_MOVE(filter));
	}
}
Example #3
0
SocketServerBase::SocketServerBase(UniqueFile socket)
	: m_socket(STD_MOVE(socket)), m_local_info(get_local_ip_port_from_fd(m_socket.get()))
{
	const int flags = ::fcntl(m_socket.get(), F_GETFL);
	if(flags == -1){
		const int code = errno;
		LOG_POSEIDON_ERROR("Could not get fcntl flags on socket.");
		DEBUG_THROW(SystemException, code);
	}
	if(::fcntl(m_socket.get(), F_SETFL, flags | O_NONBLOCK) != 0){
		const int code = errno;
		LOG_POSEIDON_ERROR("Could not set fcntl flags on socket.");
		DEBUG_THROW(SystemException, code);
	}

	LOG_POSEIDON_INFO("Created socket server, local = ", m_local_info);
}
Example #4
0
bool TcpServerBase::poll() const {
	UniqueFile client(::accept(get_fd(), NULLPTR, NULLPTR));
	if(!client){
		if(errno != EAGAIN){
			DEBUG_THROW(SystemException);
		}
		return false;
	}
	AUTO(session, on_client_connect(STD_MOVE(client)));
	if(!session){
		LOG_POSEIDON_WARNING("on_client_connect() returns a null pointer.");
		DEBUG_THROW(Exception, sslit("Null client pointer"));
	}
	if(m_ssl_factory){
		AUTO(ssl, m_ssl_factory->create_ssl());
		boost::scoped_ptr<SslFilterBase> filter(new SslFilter(STD_MOVE(ssl), session->get_fd()));
		session->init_ssl(STD_MOVE(filter));
	}
	session->set_timeout(EpollDaemon::get_tcp_request_timeout());
	EpollDaemon::add_session(session);
	LOG_POSEIDON_INFO("Accepted TCP connection from ", session->get_remote_info());
	return true;
}
Example #5
0
SocketServerBase::~SocketServerBase(){
	LOG_POSEIDON_INFO("Destroyed socket server, local = ", m_local_info);
}
Example #6
0
	void on_close(int err_code) noexcept override {
		LOG_POSEIDON_INFO("Connection error: remote = ", get_remote_info(),
			", err_code = ", err_code, ", desc = ", Poseidon::get_error_desc(err_code));
	}
Example #7
0
	void on_read_hup() noexcept override {
		LOG_POSEIDON_INFO("Connection read hup: remote = ", get_remote_info());
	}
Example #8
0
	void on_connect() override {
		LOG_POSEIDON_INFO("Connection established: remote = ", get_remote_info());
	}