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

[freewnn:00199] Re: make install すと実行できない




ごぶさたしてました。古川竜雄です。

FreeBSD での jserver 死亡の件、解決して何よりです。ってそのコードを書
いたのは私なのですが。f(^^;  週末を利用して a013 を作りますね。

# しかし… プロトタイプを書き忘れただけでここまでややこしいトラブルに
# なるのか……

濱嶋さん> unix domain socketのときのメッセージを、一目でそうとわかるよ 
濱嶋さん> うに変更しませんか?

そうですね。変えましょう。

濱嶋さん> たしかにソースを見ると、"Can't bind socket."はunix domain
濱嶋さん> socketのときで、inet socketでは"can't bind inet-socket"のよ
濱嶋さん> うです。私はinet socketだと思い込んでいました

これはまずいですよね。トラブル解決の手がかりはできるだけ多く提供すべき
だと思います。


んで、具体的にはどのようにメッセージを直せばいいでしょうか? とりあえず 
"Can't create unix domain socket." にしてみましたが、これだと 
inet-socket とバランスがとれませんよね? どう略すのがいいのでしょう? 
(あんまりそんなことにこだわらなくてもいいかな?)

あと、「なぜだめだったのか」も表示するといいと思ったので、perror() を
呼ぶようにしてみました。最後に試しに変更してみたパッチをつけますが、
Linux/Slackware 3.1 だとこんな感じになります。


複数起動しようとした時のメッセージ


    #  /tmp/w/bin/Wnn4/jserver

    Nihongo Multi Client Server (4.20)
    : can't bind inet-socket
    Transport endpoint is not connected


/tmp が書き込み禁止の時のメッセージ

    # chmod 555 /tmp

    #  /tmp/w/bin/Wnn4/jserver

    Nihongo Multi Client Server (4.20)
    : Can't bind unix domain socket.
    Permission denied


以下にパッチを添付しますが、これは perror() を無条件に使用するようになっ
ています。本体にマージするときは configure で使えるのかの判断が必要に
なると思います。


diff -ur FreeWnn-1.1.1-a012/Xsi/Wnn/jserver/de.c FreeWnn-1.1.1-a012.new/Xsi/Wnn/jserver/de.c
--- FreeWnn-1.1.1-a012/Xsi/Wnn/jserver/de.c	Wed Sep 29 01:57:16 1999
+++ FreeWnn-1.1.1-a012.new/Xsi/Wnn/jserver/de.c	Thu Oct 14 20:34:08 1999
@@ -271,7 +271,7 @@
 #else /* 4.4BSD-Lite */
 	    int fd = open("/dev/null", O_WRONLY);
 	    if (fd < 0) {
-		xerror("Cannot open /dev/null\n");
+		xerror("Cannot open /dev/null");
 	    }
 	    dup2(fd, 2);
 	    close(fd);
@@ -786,17 +786,17 @@
 	unlink(sockname);
 	strcpy(saddr_un.sun_path, sockname);
 	if ((sock_d_un = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) {
-		xerror("Can't create socket.\n");
+		xerror("Can't create unix domain socket.");
 	}
 	if (bind(sock_d_un, (struct sockaddr *)&saddr_un,
 		 strlen(saddr_un.sun_path) + 2)
 	    == ERROR) {
 		shutdown(sock_d_un, 2);
-		xerror("Can't bind socket.\n");
+		xerror("Can't bind unix domain socket.");
 	}
 	if (listen(sock_d_un, 5) == ERROR) {
 		shutdown(sock_d_un, 2);
-		xerror("Can't listen socket.\n");
+		xerror("Can't listen unix domain socket.");
 	}
 	signal(SIGPIPE, SIG_IGN);
 #ifdef DEBUG
@@ -840,7 +840,7 @@
     saddr_in.sin_port = port;
     saddr_in.sin_addr.s_addr = htonl(INADDR_ANY);
     if ((sock_d_in = socket(AF_INET,SOCK_STREAM, 0)) == ERROR) {
-	xerror("can't create inet-socket\n");
+	xerror("can't create inet-socket");
     }
     setsockopt(sock_d_in, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int));
 #ifdef SO_DONTLINGER
@@ -856,11 +856,11 @@
     if (bind(sock_d_in, (struct sockaddr *)&saddr_in,
 	     sizeof(saddr_in)) == ERROR) {
 	shutdown(sock_d_in, 2);
-	xerror("can't bind inet-socket\n");
+	xerror("can't bind inet-socket");
     }
     if (listen(sock_d_in,5) == ERROR) {
 	shutdown(sock_d_in, 2);
-	xerror("can't listen inet-socket\n");
+	xerror("can't listen inet-socket");
     }
 #if DEBUG
     error1("sock_d_in = %d\n", sock_d_in);
@@ -898,6 +898,7 @@
 register char *s;
 {
     fprintf(stderr,"%s: %s\n", cmd_name, s);
+    perror(cmd_name);
     exit(1);
 }
 

-- 
古川竜雄 (frkwtto@osk3.3web.ne.jp) / FreeWnn Project