[Anthy-dev 266] [uim] failed in listen(): Invalid argument

Back to archive index

KIHARA Hideto deton****@m1*****
2003年 10月 25日 (土) 14:39:56 JST


NetBSD/hpcarm 1.6UやFreeBSD/i386 4.6.2-RELEASEで
uim-0.1.2のtest.shを実行すると、端末に
failed in listen(): Invalid argument
というメッセージが何回か表示されます。

$LOGNAMEはdetonなのですが、/tmpを見ると、ソケットは
/tmp/uimhelper-deto
となっていて、最後の一文字が欠けています。

uim-helper-server.c:init_serv_fd()のbind()を呼んでいる部分で、
SUN_LEN()を使うように変更するとこの現象は出なくなりました。
パッチを最後に付けます。

FreeBSD 4.6.2-RELEASEでは
sockaddr_un構造体の定義が以下のようになっています。
struct  sockaddr_un {
        u_char  sun_len;                /* sockaddr len including null */
        u_char  sun_family;             /* AF_UNIX */
        char    sun_path[104];          /* path name (gag) */
};

SUN_LEN()はsys/un.hで以下のように#defineされています。
#define SUN_LEN(su) \
        (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))

Solaris 7や8ではsockaddr_un構造体にはsun_lenが無く、
SUN_LEN()は#defineされていないようです。

参考:
『UNIXネットワークプログラミング 第2版 Vol.1 ネットワークAPI: ソケットとXTI』
W.リチャード・スティーヴンス, 篠田陽一訳, トッパン, 1999, p.364

# 私はGNOMEは使ってないので、helper-appletも使えないため、
# uim-helper-serverが動かなくても全然困りませんが。

--- uim-0.1.2/uim/uim-helper-server.c.orig	2003-10-11 01:58:16.000000000 +0900
+++ uim-0.1.2/uim/uim-helper-server.c	2003-10-25 14:06:01.000000000 +0900
@@ -40,7 +40,11 @@ static int init_serv_fd(char *path)
   myhost.sun_family = PF_UNIX;
   strcpy(myhost.sun_path, path);
 
-  foo = bind(fd,(struct sockaddr *)&myhost,sizeof(myhost.sun_family) + strlen(path));
+#ifndef SUN_LEN
+#define SUN_LEN(su) \
+	(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
+#endif
+  foo = bind(fd,(struct sockaddr *)&myhost,SUN_LEN(&myhost));
   if(foo < -1){
     perror("failed in bind()");
     return -1;




Anthy-dev メーリングリストの案内
Back to archive index