/* * Copyright (C) 1999 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as published * by the Free Software Fondation. * * This program is distributed in the hope that it would be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. Further, any license provided herein, * whether implied or otherwise, is limited to this program in accordance with * the express provisions of the GNU General Public License. Patent licenses, * if any, provided herein do not apply to combinations of this program with * other product or programs, or any other product whatsoever. This program is * distributed without any warranty that the program is delivered free of the * rightful claim of any third person by way of infringement or the like. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston MA 02111-1307, USA. */ #ident "$Id: proc_net_sockstat.c,v 1.0" #include #include #include "proc_net_tcp.h" static int started = 0; int refresh_proc_net_tcp(proc_net_tcp_t *proc_net_tcp) { char buf[1024]; char fmt[64]; char *s; FILE *fp; int n; memset(proc_net_tcp, 0, sizeof(*proc_net_tcp)); if ((fp = fopen("/proc/net/tcp", "r")) == NULL) { return -errno; } while (fgets(buf, sizeof(buf)-1, fp) != NULL) { fprintf(stderr,"Buf='%s'\n",buf); if (!buf[0]) break; buf[sizeof(buf)-1] = 0; // Find colon s = buf; while(*s && (*s != ':')) s++; if (*s) { // Skip three spaces n = 3; while(*s && n) { if (*s == ' ') n--; s++; } if (*s) { // Get state n = 0; for(;;) { if (isalpha(*s)) n = (n<<4) + (toupper(*s)-'A'+10); else if (isdigit(*s)) n = (n<<4) + (*s-'0'); else break; s++; } if (n < _PM_TCP_LAST) proc_net_tcp->stat[n]++; } } } fclose(fp); /* success */ return 0; }