guile-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guile/guile-core/libguile ChangeLog socket.c


From: Gary Houston
Subject: guile/guile-core/libguile ChangeLog socket.c
Date: Fri, 20 Apr 2001 12:22:47 -0700

CVSROOT:        /cvs
Module name:    guile
Changes by:     Gary Houston <> 01/04/20 12:22:47

Modified files:
        guile-core/libguile: ChangeLog socket.c 

Log message:
        * socket.c (scm_fill_sockaddr): call htons for sin6_port.
        Don't assign sin6_scope_id in structure unless HAVE_SIN6_SCOPE_ID
        is defined.
        (scm_addr_vector): use a switch instead of multiple if statements.
        Add support for IPv6 (incomplete) .
        MAX_ADDR_SIZE: increase to size of struct sockaddr_in if needed.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/ChangeLog.diff?cvsroot=OldCVS&tr1=1.1360&tr2=1.1361&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/socket.c.diff?cvsroot=OldCVS&tr1=1.68&tr2=1.69&r1=text&r2=text

Patches:
Index: guile/guile-core/libguile/ChangeLog
diff -u guile/guile-core/libguile/ChangeLog:1.1360 
guile/guile-core/libguile/ChangeLog:1.1361
--- guile/guile-core/libguile/ChangeLog:1.1360  Fri Apr 20 00:55:19 2001
+++ guile/guile-core/libguile/ChangeLog Fri Apr 20 12:22:47 2001
@@ -1,3 +1,12 @@
+2001-04-20  Gary Houston  <address@hidden>
+
+       * socket.c (scm_fill_sockaddr): call htons for sin6_port.
+       Don't assign sin6_scope_id in structure unless HAVE_SIN6_SCOPE_ID
+       is defined.
+       (scm_addr_vector): use a switch instead of multiple if statements.
+       Add support for IPv6 (incomplete) .
+       MAX_ADDR_SIZE: increase to size of struct sockaddr_in if needed.
+
 2001-04-20  Dirk Herrmann  <address@hidden>
 
        * struct.c (scm_free_structs):  Only pairs may be accessed with
Index: guile/guile-core/libguile/socket.c
diff -u guile/guile-core/libguile/socket.c:1.68 
guile/guile-core/libguile/socket.c:1.69
--- guile/guile-core/libguile/socket.c:1.68     Tue Apr 17 16:03:07 2001
+++ guile/guile-core/libguile/socket.c  Fri Apr 20 12:22:47 2001
@@ -500,9 +500,11 @@
              }
 #endif
          }
-       soka->sin6_port = port;
+       soka->sin6_port = htons (port);
        soka->sin6_flowinfo = flowinfo;
+#ifdef HAVE_SIN6_SCOPE_ID
        soka->sin6_scope_id = scope_id;
+#endif
        *size = sizeof (struct sockaddr_in6);
        return (struct sockaddr *) soka;
       }
@@ -666,33 +668,56 @@
   SCM result;
   SCM *ve;
 
-#ifdef HAVE_UNIX_DOMAIN_SOCKETS
-  if (fam == AF_UNIX)
+  switch (fam)
     {
-      struct sockaddr_un *nad = (struct sockaddr_un *) address;
+    case AF_INET:
+      {
+       struct sockaddr_in *nad = (struct sockaddr_in *) address;
 
-      result = scm_c_make_vector (2, SCM_UNSPECIFIED);
-      ve = SCM_VELTS (result);
-      ve[0] = scm_ulong2num ((unsigned long) fam);
-      ve[1] = scm_makfromstr (nad->sun_path,
-                             (scm_sizet) strlen (nad->sun_path), 0);
-    }
-  else 
+       result = scm_c_make_vector (3, SCM_UNSPECIFIED);
+       ve = SCM_VELTS (result);
+       ve[0] = scm_ulong2num ((unsigned long) fam);
+       ve[1] = scm_ulong2num (ntohl (nad->sin_addr.s_addr));
+       ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin_port));
+      }
+      break;
+#ifdef AF_INET6
+    case AF_INET6:
+      {
+       struct sockaddr_in6 *nad = (struct sockaddr_in6 *) address;
+
+       result = scm_c_make_vector (5, SCM_UNSPECIFIED);
+       ve = SCM_VELTS (result);
+       ve[0] = scm_ulong2num ((unsigned long) fam);
+       /* FIXME */
+       ve[1] = SCM_INUM0;
+       ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin6_port));
+       ve[3] = scm_ulong2num ((unsigned long) nad->sin6_flowinfo);
+#ifdef HAVE_SIN6_SCOPE_ID
+       ve[4] = scm_ulong2num ((unsigned long) nad->sin6_scope_id);
+#else
+       ve[4] = SCM_INUM0;
 #endif
-  if (fam == AF_INET)
-    {
-      struct sockaddr_in *nad = (struct sockaddr_in *) address;
+      }
+      break;
+#endif
+#ifdef HAVE_UNIX_DOMAIN_SOCKETS
+    case AF_UNIX:
+      {
+       struct sockaddr_un *nad = (struct sockaddr_un *) address;
 
-      result = scm_c_make_vector (3, SCM_UNSPECIFIED);
-      ve = SCM_VELTS (result);
-      ve[0] = scm_ulong2num ((unsigned long) fam);
-      ve[1] = scm_ulong2num (ntohl (nad->sin_addr.s_addr));
-      ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin_port));
+       result = scm_c_make_vector (2, SCM_UNSPECIFIED);
+       ve = SCM_VELTS (result);
+       ve[0] = scm_ulong2num ((unsigned long) fam);
+       ve[1] = scm_makfromstr (nad->sun_path,
+                               (scm_sizet) strlen (nad->sun_path), 0);
+      }
+      break;
+#endif
+    default:
+      scm_misc_error (proc, "Unrecognised address family: ~A",
+                     SCM_LIST1 (SCM_MAKINUM (fam)));
     }
-  else
-    scm_misc_error (proc, "Unrecognised address family: ~A",
-                   SCM_LIST1 (SCM_MAKINUM (fam)));
-
   return result;
 }
 
@@ -705,8 +730,15 @@
 #else
 #define MAX_SIZE_UN 0
 #endif
+
+#if defined (AF_INET6)
+#define MAX_SIZE_IN6 sizeof (struct sockaddr_in6)
+#else
+#define MAX_SIZE_IN6 0
+#endif
 
-#define MAX_ADDR_SIZE max (sizeof (struct sockaddr_in), MAX_SIZE_UN)
+#define MAX_ADDR_SIZE max (max (sizeof (struct sockaddr_in), MAX_SIZE_IN6),\
+                           MAX_SIZE_UN)
 
 SCM_DEFINE (scm_accept, "accept", 1, 0, 0, 
             (SCM sock),



reply via email to

[Prev in Thread] Current Thread [Next in Thread]