OSSP CVS Repository

ossp - Difference in ossp-pkg/l2/l2_sockmon.c versions 1.8 and 1.9
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/l2/l2_sockmon.c 1.8 -> 1.9

--- l2_sockmon.c 2001/09/13 19:18:34     1.8
+++ l2_sockmon.c 2001/09/26 08:55:19     1.9
@@ -27,10 +27,13 @@
 **  l2_sockmon.c: Socket monitor for use with l2_test.c
 */
 
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <arpa/inet.h>
 #include <stdio.h>
+#include <unistd.h>
 #include <errno.h>
 #include <assert.h>
 
@@ -39,56 +42,73 @@
 #define BACKLOG 1024    /* max # pending connections */
 #define BUFFSIZ 256     /* max string size           */
 
-char *strlowerdup(const char *pszIn)
+char *strlowerdup(const char *);       /* prototypes */
+void dowork(int);
+int  myserver(int, int, int);
+void die(const char *);
+void closedie(int, const char *);
+
+void die(const char *szMsg)
+{
+    perror(szMsg);
+    exit(1);
+}
+
+void closedie(int iSock, const char *szMsg)
+{
+    perror(szMsg);
+    close(iSock);
+    exit(1);
+}
+
+char *strlowerdup(const char *szIn)
 {
-    int  i        = 0;
-    char *pszTemp = NULL;
+    int  i       = 0;
+    char *szTemp = NULL;
 
-    assert(pszIn != NULL);
+    assert(szIn != NULL);
 
-    if ((pszTemp = (char *)strdup(pszIn)) == NULL)
+    if ((szTemp = (char *)strdup(szIn)) == NULL)
         return NULL;
     else
     {
-        for (i = 0; *(pszTemp + i); i++)
-            if (isupper(*(pszTemp + i)))
-                *(pszTemp + i) = (char)tolower(*(pszTemp + i));
-        return pszTemp;
+        for (i = 0; *(szTemp + i); i++)
+            if (isupper(*(szTemp + i)))
+                *(szTemp + i) = (char)tolower(*(szTemp + i));
+        return szTemp;
     }
 }
 
 void dowork(int iSock)
 {
-    char pszBuf[BUFFSIZ];
+    char szBuf[BUFFSIZ];
     int  cc;
 
     while (1) { /* Exits when read finishes */
-        cc = read(iSock, pszBuf, sizeof (pszBuf));
-        if (cc == -1) {
-            perror("read");
-            exit(1);
-        }
+        cc = read(iSock, szBuf, sizeof (szBuf));
+        if (cc == -1)
+            die("read()");
 
         if (cc == 0) {
             /* EOF */
-            (void) close(iSock);
-            (void) printf("Connection closed\n");
+            close(iSock);
+            fprintf(stderr, "Connection closed\n");
             return;
         }
 
-        pszBuf[cc + 1] = '\0';
-        (void) printf("Read: %s", pszBuf);
+        szBuf[cc + 1] = '\0';
+        fprintf(stderr, "Read: %s", szBuf);
 
-        if (write(iSock, pszBuf, cc) == -1) {
-            perror("write");
-            exit(1);
-        }
+        if (write(iSock, szBuf, cc) == -1)
+            die("write()");
     }
 }
 
 int myserver(int iFamily, int iProtocol, int iPort)
 {
-    char pszBuf[BUFFSIZ];
+    char                szBuf[BUFFSIZ];
+    char                szAddrin4[INET_ADDRSTRLEN];
+    char                szAddrin6[INET6_ADDRSTRLEN];
     struct sockaddr_in  laddr4,   faddr4,    caddr4;
     struct sockaddr_in6 laddr6,   faddr6,    caddr6;
     int                 iSock,    iNewsock;
@@ -128,28 +148,19 @@
         return -1;
     }
 
-    /* Tell the system to allow local addresses to be reused. */
+    /* Allow local addresses to be reused. */
     iSockopt = 1;
-    if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt,\
-        sizeof (iSockopt)) == -1) {
-        perror("setsockopt(SO_REUSEADDR)");
-        (void) close(iSock);
-        return -1;
-    }
+    if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt, sizeof (iSockopt)) == -1)
+        closedie(iSock, "setsockopt(SO_REUSEADDR)");
 
     if (iFamily == AF_INET6) {
-        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1) {
-            perror("bind"); /* Bad bind */
-            (void) close(iSock);
-            return -1;
-            }
+        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1)
+            closedie(iSock, "bind()");
     }
+
     else if (iFamily == AF_INET) {
-        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1) {
-            perror("bind"); /* Bad bind */
-            (void) close(iSock);
-            return -1;
-            }
+        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1)
+            closedie(iSock, "bind()");
     }
 
     if (iProtocol == IPPROTO_UDP) {
@@ -159,30 +170,25 @@
 
             for (;;) { /* Receive messages */
                 faddrlen = sizeof(caddr6);
-                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
-                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
+                memset(szBuf, 0x0, BUFFSIZ); /* Init the buffer */
+                cc = recvfrom(iSock, szBuf, BUFFSIZ, 0, (struct sockaddr *)\
                     &caddr6, &faddrlen);
 
-                if (cc == -1) {
-                    perror("recvfrom");
-                    exit(1);
-                }
+                if (cc == -1)
+                    die("recvfrom()");
 
-                if (cc == 0) {
-                    /* EOF */
-                    (void) close(iSock);
-                    (void) printf("Connection closed\n");
-                    return;
+                if (cc == 0) { /* EOF */
+                    close(iSock);
+                    fprintf(stderr, "Connection closed\n");
+                    return 0;
                 }
 
                 if (cc != BUFFSIZ) {
-                    pszBuf[cc + 1] = '\0';
-                    (void) printf("Read: %s", pszBuf);
+                    szBuf[cc + 1] = '\0';
+                    fprintf(stderr, "Read: %s", szBuf);
 
-                    if (write(iSock, pszBuf, cc) == -1) {
-                        perror("write");
-                        exit(1);
-                    }
+                    if (write(iSock, szBuf, cc) == -1)
+                        die("write()");
                 }
                 else
                     return -1;
@@ -190,34 +196,29 @@
         }
         else if (iFamily == AF_INET) {
             /* initialize address structure */
-            memset(&caddr4,  0, sizeof(caddr4));
+            memset(&caddr4, 0, sizeof(caddr4));
 
             for (;;) { /* Receive messages */
                 faddrlen = sizeof(caddr4);
-                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
-                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
+                memset(szBuf, 0x0, BUFFSIZ); /* Init the buffer */
+                cc = recvfrom(iSock, szBuf, BUFFSIZ, 0, (struct sockaddr *)\
                     &caddr4, &faddrlen);
 
-                if (cc == -1) {
-                    perror("recvfrom");
-                    exit(1);
-                }
+                if (cc == -1)
+                    die("recvfrom()");
 
-                if (cc == 0) {
-                    /* EOF */
-                    (void) close(iSock);
-                    (void) printf("Connection closed\n");
-                    return;
+                if (cc == 0) { /* EOF */
+                    close(iSock);
+                    fprintf(stderr, "Connection closed\n");
+                    return 0;
                 }
 
                 if (cc != BUFFSIZ) {
-                    pszBuf[cc + 1] = '\0';
-                    (void) printf("Read: %s", pszBuf);
+                    szBuf[cc + 1] = '\0';
+                    fprintf(stderr, "Read: %s", szBuf);
 
-                    if (write(iSock, pszBuf, cc) == -1) {
-                        perror("write");
-                        exit(1);
-                    }
+                    if (write(iSock, szBuf, cc) == -1)
+                        die("write()");
                 }
                 else
                     return -1;
@@ -225,11 +226,8 @@
         }
     }
     else if (iProtocol == IPPROTO_TCP) { /* Only try to listen if we have TCP */
-        if (listen(iSock, BACKLOG) == -1) {
-            perror("listen"); /* Listen just blew up */
-            (void) close(iSock);
-            return -1;
-        }
+        if (listen(iSock, BACKLOG) == -1)
+            closedie(iSock, "listen()");
 
         /* Wait for a connection request */
         if (iFamily == AF_INET6) {
@@ -241,13 +239,17 @@
                 iNewsock = accept(iSock, (struct sockaddr *)&faddr6, &faddrlen);
                 if (iNewsock == -1) {
                     if (errno != EINTR && errno != ECONNABORTED) {
-                        perror("accept");
+                        perror("accept()");
                     }
                     continue;
                 }
-                (void) printf("Connection from %s/%d\n",\
-                    inet_ntop(faddr6.sin6_addr), ntohs(faddr6.sin6_port));
-                dowork(iNewsock); /* do some sockwork */
+
+                if (inet_ntop(AF_INET6, &faddr6.sin6_addr, szAddrin6, sizeof(szAddrin6)) != NULL) {
+                    fprintf(stderr, "Connection from %s/%d\n", szAddrin6, ntohs(faddr6.sin6_port));
+                    dowork(iNewsock); /* do some sockwork */
+                }
+                else
+                    die("inet_ntop()");
             }
         }
         else if (iFamily == AF_INET) {
@@ -259,19 +261,17 @@
                 iNewsock = accept(iSock, (struct sockaddr *)&faddr4, &faddrlen);
                 if (iNewsock == -1) {
                     if (errno != EINTR && errno != ECONNABORTED) {
-                        perror("accept");
+                        perror("accept()");
                     }
                     continue;
                 }
-                (void) printf("Connection from %s/%d\n",\
-                    inet_ntop(faddr4.sin_addr), ntohs(faddr4.sin_port));
+                inet_ntop(AF_INET6, &faddr4.sin_addr, szAddrin4, sizeof(szAddrin4));
+                fprintf(stderr, "Connection from %s/%d\n", szAddrin4, ntohs(faddr6.sin6_port));
                 dowork(iNewsock); /* do some sockwork */
             }
         }
-        /* NOTREACHED */
-    }
-    else
-        return -1; /* We are being asked to serve other than TCP or UDP */
+    } /* NOTREACHED */
+    return -1; /* Failure due to non UDP/TCP request, or execution flow */
 }
 
 int main(int argc, char *argv[])
@@ -281,7 +281,7 @@
     int iPort  = 0;
 
     if (argc != 4) {
-        (void) fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
+        fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
         exit(1); /* Dink donk if the user doesn't know how to use this */
     }
 

CVSTrac 2.0.1