'get info from /proc/net/sockstat and sockstat6
Note: The mem value is actually kernel pages, but we return bytes
allocated based on the systems page size.'

def get_socket_info(self, openr=open):

    sockstat = {}
    try:
        with openr('/proc/net/sockstat', 'r') as proc_sockstat:
            for entry in proc_sockstat:
                if entry.startswith('TCP:    inuse'):
                    tcpstats = entry.split()
                    sockstat['tcp_in_use'] = int(tcpstats[2])
                    sockstat['orphan'] = int(tcpstats[4])
                    sockstat['time_wait'] = int(tcpstats[6])
                    sockstat['tcp_mem_allocated_bytes'] = (int(tcpstats[10]) * getpagesize())
    except IOError as e:
        if (e.errno != errno.ENOENT):
            raise
    try:
        with openr('/proc/net/sockstat6', 'r') as proc_sockstat6:
            for entry in proc_sockstat6:
                if entry.startswith('TCP6:    inuse'):
                    sockstat['tcp6_in_use'] = int(entry.split()[2])
    except IOError as e:
        if (e.errno != errno.ENOENT):
            raise
    return sockstat
