linux tcp_stat impl
This commit is contained in:
		
							parent
							
								
									414a38ac13
								
							
						
					
					
						commit
						ef37a1bf3a
					
				@ -2079,11 +2079,49 @@ static int sigar_net_connection_get(sigar_t *sigar,
 | 
			
		||||
    return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define SNMP_TCP_PREFIX "Tcp: "
 | 
			
		||||
 | 
			
		||||
SIGAR_DECLARE(int)
 | 
			
		||||
sigar_tcp_stat_get(sigar_t *sigar,
 | 
			
		||||
                   sigar_tcp_stat_t *tcpstat)
 | 
			
		||||
{
 | 
			
		||||
    return SIGAR_ENOTIMPL;
 | 
			
		||||
    FILE *fp;
 | 
			
		||||
    char buffer[1024], *ptr=buffer;
 | 
			
		||||
    int status = SIGAR_ENOENT;
 | 
			
		||||
 | 
			
		||||
    if (!(fp = fopen(PROC_FS_ROOT "net/snmp", "r"))) {
 | 
			
		||||
        return errno;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while (fgets(buffer, sizeof(buffer), fp)) {
 | 
			
		||||
        if (strnEQ(buffer, SNMP_TCP_PREFIX, sizeof(SNMP_TCP_PREFIX)-1)) {
 | 
			
		||||
            if (fgets(buffer, sizeof(buffer), fp)) {
 | 
			
		||||
                status = SIGAR_OK;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fclose(fp);
 | 
			
		||||
 | 
			
		||||
    if (status == SIGAR_OK) {
 | 
			
		||||
        /* assuming field order, same in 2.2, 2.4 and 2.6 kernels */ 
 | 
			
		||||
        /* Tcp: RtoAlgorithm RtoMin RtoMax */
 | 
			
		||||
        ptr = sigar_skip_multiple_token(ptr, 4);
 | 
			
		||||
        tcpstat->max_conn = sigar_strtoul(ptr);
 | 
			
		||||
        tcpstat->active_opens = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->passive_opens = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->attempt_fails = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->estab_resets = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->curr_estab = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->in_segs = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->out_segs = sigar_strtoull(ptr);
 | 
			
		||||
        tcpstat->retrans_segs = sigar_strtoull(ptr);
 | 
			
		||||
        (void)sigar_strtoull(ptr); /* InErrs */
 | 
			
		||||
        tcpstat->out_rsts = sigar_strtoull(ptr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sigar_proc_port_get(sigar_t *sigar, int protocol,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user