apache1.3のバージョンアップ-解決編

10月2日のエントリで書いたapache1.3.39+mod_jkでのmod_jkのmakeの際に発生した以下のエラーの件。

 gcc -I/home1/hoge/apache/apache_1.3.39/src/include -I/home1/hoge/apache/apache_1.3.39/src/os/unix -g -O2 -DJK_PREFORK -g -O2 -DJK_PREFORK -I /include -I /include/ -c jk_connect.c  -fPIC -DPIC -o .libs/jk_connect.o
jk_connect.c: In function 'nb_connect':
jk_connect.c:186: error: 'socklen_t' undeclared (first use in this function)

このエラーが発生したのはSolaris2.6。この環境で/usr以下のincludeを全部検索してもsocklen_tは見つかりません。Solaris9環境でこうやって探してみると、簡単に解が見つかりました。

$ find . -name '*.h' -exec fgrep socklen_t {} /dev/null \; | grep typedef
./include/sys/socket.h:typedef  size_t          socklen_t;
./include/sys/socket.h:typedef  uint32_t        socklen_t;

/usr/include/sys/socket.hをのぞいてみると該当箇所はこんなの。

#if defined(_XPG4_2) && !defined(_XPG5) && !defined(_LP64)
typedef size_t          socklen_t;
#else
typedef uint32_t        socklen_t;
#endif  /* defined(_XPG4_2) && !defined(_XPG5) && !defined(_LP64) */

というわけで socklen_t は size_t と同値ということで。
native/common/jk_connect.cの186行目を次のように変更。

/*
        socklen_t rclen = (socklen_t)sizeof(rc);
*/
        size_t rclen = (size_t)sizeof(rc);