Ejemplo n.º 1
0
	bool TcpListener::onEvent(const fd_t fd, const uint64_t events){
		struct sockaddr_in client_addr;
		socklen_t addr_len =0;
		const int client_fd =::accept(m_sock, (struct sockaddr*)&client_addr, &addr_len);
		if(client_fd != INVALID_FD){
			TcpConnection* conn =create_connection();
			const char* client_host =::inet_ntoa(client_addr.sin_addr);
			const int32_t client_port =client_addr.sin_port;
			conn->attach(client_fd, client_host, client_port);

			// deliver
			return Network::Deliver(conn, m_deliver_begin, m_deliver_range);
		}
		else{
			const int errcode =get_last_error();
			if(errcode==EINTR || errcode==EAGAIN || errcode==EWOULDBLOCK){
				return true;
			}
			else{
				WARN("TcpListener accept failed, %s", get_last_error_desc());
				return true;
			}
		}
	}