まつもと ゆきひろです

しばらく前に九工大の黒田さんから,Linuxでsocketを使うと,
portをサービス名で指定するとちゃんと動くが,port番号で指定す
ると動かないという現象を指摘されていたのですが,今日になって
初めて原因が分かりました.

原因はlinux machinのcpuはlittle endienだった事です.port番号
はnetwork byte orderで指定する必要があったのに,htonsを噛ま
せるのを忘れていました.

既に修正しましたので,次のリリースでは反映されます.
お急ぎの場合は以下のパッチを当ててください.

# 最近黒田さんへのメイルがエラーになる事が多いんだけど,この
# メイルはちゃんと届くかなあ.

--- ext/socket/socket.c~	Wed Jul 31 19:25:45 1996
+++ ext/socket/socket.c	Thu Aug  1 00:05:02 1996
@@ -208 +208 @@
-	_servent.s_port = servport;
+	_servent.s_port = htons(servport);
@@ -365 +365,3 @@
-	char *a = (char*)&sockaddr->sin_addr;
+	long x = ntohl(sockaddr->sin_addr.s_addr);
+	char *a = (char*)&x;
+
                                まつもと ゆきひろ /:|)