[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00732] select listen protocol (Re: cmd_name not set in jserver/de.c)
濱嶋です。
jserverでプロトコルを引数で選べるようにしました。
-u (unix domain socket)
-4 (inet)
-6 (inet6 ただし--enable-inet6のときのみ)
未指定時はすべてです。
jserverとしては問題ないと思うのですが、jutilからjlibにかけての実装が
ひとつでも接続できればOKとなっていないので、実際には動作していても
wnnkill:サーバが死んでいます。
とか
wnnkill:サーバと接続できませんでした。
と言われてしまいます。
Tue, 28 Aug 2001 15:05:35 +0900 (JST) に
aono@cc.osaka-kyoiku.ac.jp (Tomoki AONO) さんが書かれた
<200108280605.PAA06377@ikoma.cc.osaka-kyoiku.ac.jp> を引用しています
>>> jserver/de.cの中にある変数 cmd_name (たぶんコマンド名)って、誰も設定して
>>> いないように見えますが、そんなことないですか?
>
> 小野さんも[freewnn:00633]で案を示されていますが、後回しに
> なっている模様です。
そうだったんですか。
とりあえず、添付のパッチはargv[0]をコピーしていますので適切なものに直し
てください。
それからargv[0]を前提としてcmd_nameの長さはMAXPATHLENに変更してあります。
こちらも適切なものに直してください。
--- FreeWnn/Wnn/jserver/de.c.orig Tue Aug 28 15:06:56 2001
+++ FreeWnn/Wnn/jserver/de.c Tue Aug 28 15:17:37 2001
@@ -112,6 +112,14 @@
#define INET6_ACPT 2
#endif
+#define PROTO_ALL 0x1
+#define PROTO_UN 0x2
+#define PROTO_INET 0x4
+#ifdef INET6
+#define PROTO_INET6 0x8
+#endif
+static listen_proto = PROTO_ALL;
+
jmp_buf client_dead;
static int port;
@@ -185,7 +193,7 @@
#endif
-char cmd_name[80];
+char cmd_name[MAXPATHLEN];
/* No arguments are used. Only options. */
int
@@ -201,6 +209,7 @@
char nlspath[64];
+ strcpy (cmd_name, argv[0]);
strcpy (lang_dir, LANG_NAME);
strcpy (nlspath, LIBDIR);
strcat (nlspath, "/%L/%N");
@@ -528,9 +537,16 @@
clientp = 0; /* V3.0 */
cur_clp = 0; /* V3.0 */
socket_disc_init ();
- socket_init_in ();
+#ifdef INET6
+ if (listen_proto&(PROTO_ALL|PROTO_INET|PROTO_INET6))
+ socket_init_in ();
+#else
+ if (listen_proto&(PROTO_ALL|PROTO_INET))
+ socket_init_in ();
+#endif
#ifdef AF_UNIX
- socket_init_un ();
+ if (listen_proto&(PROTO_ALL|PROTO_UN))
+ socket_init_un ();
#endif /* AF_UNIX */
}
@@ -983,7 +999,12 @@
#endif
#ifdef INET6
memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
+ if (listen_proto&PROTO_INET && !(listen_proto&PROTO_INET6))
+ hints.ai_family = PF_INET;
+ else if (listen_proto&PROTO_INET6 && !(listen_proto&PROTO_INET))
+ hints.ai_family = PF_INET6;
+ else
+ hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
sprintf(sport, "%d", port);
@@ -1149,7 +1170,11 @@
strcpy (jserverrcfile, LIBDIR); /* usr/local/lib/wnn */
strcat (jserverrcfile, SERVER_INIT_FILE); /* ja_JP/jserverrc */
- while ((c = getopt (argc, argv, "f:s:h:N:p:v")) != EOF)
+#ifndef INET6
+ while ((c = getopt (argc, argv, "f:s:h:N:p:vu4")) != EOF)
+#else
+ while ((c = getopt (argc, argv, "f:s:h:N:p:vu46")) != EOF)
+#endif
{
switch (c)
{
@@ -1188,6 +1213,20 @@
# endif /* KOREAN */
#endif /* CHINESE */
exit (0);
+ case 'u':
+ listen_proto &= ~PROTO_ALL;
+ listen_proto |= PROTO_UN;
+ break;
+ case '4':
+ listen_proto &= ~PROTO_ALL;
+ listen_proto |= PROTO_INET;
+ break;
+#ifdef INET6
+ case '6':
+ listen_proto &= ~PROTO_ALL;
+ listen_proto |= PROTO_INET6;
+ break;
+#endif
default:
usage();
}
@@ -1238,7 +1277,11 @@
usage ()
{
fprintf(stderr,
- "usage: %s [-f <init_file> -s <log_file(\"-\" for stderr)> -h <pos_file> -N <serverNO> -p <port_base>]\n",
+#ifdef INET6
+ "usage: %s [-f <init_file> -s <log_file(\"-\" for stderr)> -h <pos_file> -N <serverNO> -p <port_base> -u -4 -6]\n",
+#else
+ "usage: %s [-f <init_file> -s <log_file(\"-\" for stderr)> -h <pos_file> -N <serverNO> -p <port_base> -u -4]\n",
+#endif
cmd_name);
fprintf(stderr,
" %s -v\n",