Пример #1
0
void CDaemonServer::on_physical_server_event(const ServerInfoJson& server_json, CConnection* connection)
{
	if(connection != NULL)
	{
		process_server_info(server_json, connection);
	}
	else
	{
		DAEMON_WARNING("on_physical_server_event, conn = NULL!!!");
	}
}
Пример #2
0
void *servers_thread(void *a)
{
	struct pollfd *fds;
	int fdcount;
	
	struct sockaddr_in sockaddr;
	struct buffer_t *buffer;
	
	fdcount = 2;
	
	fds = calloc(sizeof(struct pollfd), fdcount);
	
	fds[0].fd = servers_kill_pipe[0];	fds[0].events = POLLIN;
	fds[1].fd = servers_info_pipe[0];	fds[1].events = POLLIN;
	

	while(1)
	{
		if(TEMP_FAILURE_RETRY(poll(fds, fdcount, -1)) == -1)
		{
			free(fds);
			pthread_exit(NULL);
		}

		if(fds[0].revents & POLLIN)
		{
			free(fds);
			pthread_exit(NULL);
		}
		
		if(fds[1].revents & POLLIN)
		{
			TEMP_FAILURE_RETRY(read(servers_info_pipe[0], &sockaddr, sizeof(struct sockaddr_in)));
			TEMP_FAILURE_RETRY(read(servers_info_pipe[0], &buffer, 4));
			pthread_mutex_lock(&servers_mutex);
			process_server_info(&sockaddr, buffer);
			pthread_mutex_unlock(&servers_mutex);
			free_buffer(buffer);
		}
	}
}