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

[freewnn:00716] Re: cpp patch + v6 patch



おはようございます、濱嶋です。

>> 最初の、謎の *.1111 がそれかもしれません。
>> 少なくとも期待される 22276 はないです。
> 
> こちらはわかりました。
> 小野さんはlittle endian(i386)だからバグって、私はbig endian(macppcと
> sparc)だからバグらなかったということです。もしやと思ってNetBSD/hpcmips
> で実行したら再現しました。

修正パッチです。

・little endianでポート番号を間違えるバグの修正
・unix domain socketのpermissionを強制的に0777にする
・-DDEBUGのときに後方参照している関数の宣言
・v6 socketのときのエラーメッセージを、手を抜かずに"inet6"で出力する

以上です。
--- Wnn/jserver/de.c.orig	Mon Jul 30 14:52:53 2001
+++ Wnn/jserver/de.c	Thu Aug 23 10:19:11 2001
@@ -180,6 +180,9 @@
 static int get_client (), rcv_1_client (), socket_accept_un (), socket_accept_in ();
 int get2_cur ();
 static void usage __P((void));
+#ifdef DEBUG
+static void dmp ();
+#endif
 
 char cmd_name[80];
 
@@ -927,6 +930,7 @@
           shutdown (sock_d_un, 2);
           xerror ("Can't listen unix domain socket.");
         }
+      chmod (sockname, 0777);
       signal (SIGPIPE, SIG_IGN);
 #ifdef DEBUG
       error1 ("sock_d_un = %d\n", sock_d_un);
@@ -971,7 +975,7 @@
         }
     }
 
-  port = htons (port + serverNO);
+  port += serverNO;
 
 #if DEBUG
   error1 ("port=%x\n", port);
@@ -992,11 +996,16 @@
       if ((sock_d_in = socket (res->ai_family, res->ai_socktype, res->ai_protocol)) == ERROR)
 #else
   saddr_in.sin_family = AF_INET;
-  saddr_in.sin_port = port;
+  saddr_in.sin_port = htons (port);
   saddr_in.sin_addr.s_addr = htonl (INADDR_ANY);
   if ((sock_d_in = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
 #endif
     {
+#ifdef INET6
+      if (res->ai_family == AF_INET6)
+        xerror ("can't create inet6 socket");
+      else if (res->ai_family == AF_INET)
+#endif
       xerror ("can't create inet socket");
     }
   setsockopt (sock_d_in, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (int));
@@ -1017,11 +1026,21 @@
 #endif
     {
       shutdown (sock_d_in, 2);
+#ifdef INET6
+      if (res->ai_family == AF_INET6)
+        xerror ("can't bind inet6 socket");
+      else if (res->ai_family == AF_INET)
+#endif
       xerror ("can't bind inet socket");
     }
   if (listen (sock_d_in, 5) == ERROR)
     {
       shutdown (sock_d_in, 2);
+#ifdef INET6
+      if (res->ai_family == AF_INET6)
+        xerror ("can't listen inet6 socket");
+      else if (res->ai_family == AF_INET)
+#endif
       xerror ("can't listen inet socket");
     }
 #if DEBUG


http://www.freewnn.org/ FreeWnn Project