save listen port address as cache val for later use
This commit is contained in:
		
							parent
							
								
									614fd63728
								
							
						
					
					
						commit
						fbaa233617
					
				
							
								
								
									
										26
									
								
								src/sigar.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								src/sigar.c
									
									
									
									
									
								
							@ -845,16 +845,25 @@ sigar_net_connection_list_get(sigar_t *sigar,
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void sigar_net_listen_address_add(sigar_t *sigar,
 | 
			
		||||
                                         sigar_net_connection_t *conn)
 | 
			
		||||
{
 | 
			
		||||
    sigar_cache_entry_t *entry =
 | 
			
		||||
        sigar_cache_get(sigar->net_listen, conn->local_port);
 | 
			
		||||
 | 
			
		||||
    if (!entry->value) {
 | 
			
		||||
        entry->value = malloc(sizeof(conn->local_address));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    memcpy(entry->value, &conn->local_address,
 | 
			
		||||
           sizeof(conn->local_address));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    sigar_net_stat_t *netstat;
 | 
			
		||||
    sigar_net_connection_list_t *connlist;
 | 
			
		||||
} net_stat_getter_t;
 | 
			
		||||
 | 
			
		||||
static void listen_port_free(void *ptr)
 | 
			
		||||
{
 | 
			
		||||
    /*noop*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int net_stat_walker(sigar_net_connection_walker_t *walker,
 | 
			
		||||
                           sigar_net_connection_t *conn)
 | 
			
		||||
{
 | 
			
		||||
@ -868,11 +877,7 @@ static int net_stat_walker(sigar_net_connection_walker_t *walker,
 | 
			
		||||
 | 
			
		||||
        /* XXX listen_ports may get stale */
 | 
			
		||||
        if (state == SIGAR_TCP_LISTEN) {
 | 
			
		||||
            sigar_cache_entry_t *entry =
 | 
			
		||||
                sigar_cache_get(listen_ports,
 | 
			
		||||
                                conn->local_port);
 | 
			
		||||
 | 
			
		||||
            entry->value = (void*)conn->local_port;
 | 
			
		||||
            sigar_net_listen_address_add(walker->sigar, conn);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            if (sigar_cache_find(listen_ports,
 | 
			
		||||
@ -908,7 +913,6 @@ sigar_net_stat_get(sigar_t *sigar,
 | 
			
		||||
 | 
			
		||||
    if (!sigar->net_listen) {
 | 
			
		||||
        sigar->net_listen = sigar_cache_new(32);
 | 
			
		||||
        sigar->net_listen->free_value = listen_port_free;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    SIGAR_ZERO(netstat);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user