[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