From: matz@... (Yukihiro Matsumoto) Date: 1996-08-01T10:08:03+09:00 Subject: [ruby-list:377] socket on little endien machines まつもと ゆきひろです しばらく前に九工大の黒田さんから,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; + まつもと ゆきひろ /:|)