]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-aix-unix-sockets-fix-200803221
authorTom Keiser <tkeiser@sinenomine.net>
Fri, 21 Mar 2008 16:59:26 +0000 (16:59 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 21 Mar 2008 16:59:26 +0000 (16:59 +0000)
LICENSE IPL10
FIXES 88088

use aix's macro for the size of sockaddr_un

(cherry picked from commit 493afd1e59661e64120a8d655d6503ac396ca46b)

src/vol/fssync.c

index 71b8ff19cf9cc4d21691ce49457d8c85eba488b8..0747efb22e9454331db242cb3e57279f218210a9 100644 (file)
@@ -162,6 +162,17 @@ extern int LogLevel;
  */
 struct Lock FSYNC_handler_lock;
 
+
+/*
+ * On AIX, connect() and bind() require use of SUN_LEN() macro;
+ * sizeof(struct sockaddr_un) will not suffice.
+ */
+#if defined(AFS_AIX_ENV) && defined(USE_UNIX_SOCKETS)
+#define AFS_SOCKADDR_LEN(sa)  SUN_LEN(sa)
+#else
+#define AFS_SOCKADDR_LEN(sa)  sizeof(*sa)
+#endif
+
 int
 FSYNC_clientInit(int f)
 {
@@ -177,7 +188,7 @@ FSYNC_clientInit(int f)
 
     for (;;) {
        FS_sd = getport(&addr);
-       if (connect(FS_sd, (struct sockaddr *)&addr, sizeof(addr)) >= 0)
+       if (connect(FS_sd, (struct sockaddr *)&addr, AFS_SOCKADDR_LEN(&addr)) >= 0)
            return 1;
        if (!f) {
            FSYNC_clientFinis();
@@ -367,7 +378,7 @@ FSYNC_sync()
 
     for (numTries = 0; numTries < MAX_BIND_TRIES; numTries++) {
        if ((code =
-            bind(AcceptSd, (struct sockaddr *)&addr, sizeof(addr))) == 0)
+            bind(AcceptSd, (struct sockaddr *)&addr, AFS_SOCKADDR_LEN(&addr))) == 0)
            break;
 #ifdef USE_UNIX_SOCKETS
        code = errno;