[#42945] [Ruby 1.8-Bug#4231][Open] configure.bat --with-winsock2 が socket/extconf.rbに効いていない — Masahiro Kitajima <redmine@...>

Bug #4231: configure.bat --with-winsock2 が socket/extconf.rbに効いていない

8 messages 2011/01/05

[#43027] [Ruby 1.9-Feature#4280][Assigned] SJIS should be an alias of Windows-31J, not of Shift_JIS — Usaku NAKAMURA <redmine@...>

Feature #4280: SJIS should be an alias of Windows-31J, not of Shift_JIS

13 messages 2011/01/14
[#43030] [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — Motohiro KOSAKI <redmine@...> 2011/01/14

チケット #4280 が更新されました。 (by Motohiro KOSAKI)

[#43031] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43033] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — KOSAKI Motohiro <kosaki.motohiro@...> 2011/01/14

2011年1月14日16:35 U.Nakamura <usa@garbagecollect.jp>:

[#43039] ext/openssl development repository — Hiroshi Nakamura <nakahiro@...>

W3J1YnktY29yZTozNDQxNl3jga7ml6XmnKzlkJHjgZHniYjjgafjgZnjgIIKCuacgOi/kU1hcnRp

21 messages 2011/01/14
[#43040] Re: ext/openssl development repository — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43041] Re: ext/openssl development repository — Yusuke ENDOH <mame@...> 2011/01/14

遠藤です。

[#43053] Re: ext/openssl development repository — Hiroshi Nakamura <nakahiro@...> 2011/01/17

MjAxMS8xLzE0IFl1c3VrZSBFTkRPSCA8bWFtZUB0c2cubmUuanA+Ogo+Pj4gwqAgwqAgwqAgwqAg

[#43092] pthread_cond を用いたConditionVariable — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

15 messages 2011/01/24

[ruby-dev:42944] [Ruby 1.8-Bug#4230][Open] PlatformSDKのヘッダでビルドするとSocket::getaddrinfoで例外

From: Masahiro Kitajima <redmine@...>
Date: 2011-01-05 05:50:11 UTC
List: ruby-dev #42944
Bug #4230: PlatformSDKのヘッダでビルドするとSocket::getaddrinfoで例外
http://redmine.ruby-lang.org/issues/show/4230

起票者: Masahiro Kitajima
ステータス: Open, 優先度: Normal
ruby -v: ruby -v:ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]

 以前からVC++6.0対応の最後の Platform SDK である「Microsoft Platform SDK February 2003」を使ってビルドしていました。
 ruby-1.8.7-p330から ext/socket/extconf.rb が変わった事で、getaddrinfo()、getnameinfo() に、エミュレーション・コード(getaddrinfo.c、getnameinfo.c)の代わりに Windows API が使われるようになりました。
 これにより、以下のコードの address に nil や "localhost" を与えた時に例外が上がるようになりました。

---- ここから ----
require 'socket'
port = 80
address = "localhost"
p Socket::getaddrinfo(address, port,
                      Socket::AF_UNSPEC,   # address family
                      Socket::SOCK_STREAM, # socket type
                      0,                   # protocol
                      Socket::AI_PASSIVE)  # flag
#=>
test.rb:4:in `getaddrinfo': getnameinfo: 呼び出しでポインタ引数を使用するときに、無効なポインタ アドレスを検出しました。  (SocketError)
        from test.rb:4

# ruby-1.8.7-p302 =>
[["AF_INET", 80, "localhost", "127.0.0.1", 2, 1, 6]]
---- ここまで ----

 このテスト・コードは WEBrick::Utils#create_listeners に書かれているものです。WEBrick 利用のアプリケーション(gem server など)が動かなくなって気付きました。
 なお、VC++6.0 のヘッダでビルドした時は getaddrinfo.c、getnameinfo.c が使われるため、上記現象は起きません。

 ext/socket/extconf.rb を以下のようにすると、Platform SDK のヘッダでビルドした時の getnameinfo() API 呼び出しの矛盾がなくなり、上記現象が解消します。また結果として IPv6 対応になります。
 また VC++6.0 のヘッダでビルドした時は、従来どおり getaddrinfo.c、getnameinfo.c が使われます。

---- ここから ----
--- extconf.rb.org      Wed Nov 24 18:37:06 2010
+++ extconf.rb  Tue Jan 04 20:27:24 2011
@@ -43,4 +43,5 @@
   if checking_for("ipv6") {try_link(<<EOF)}
-#include <sys/types.h>
-#include <sys/socket.h>
+#{(RUBY_PLATFORM =~ /mswin32/) ?
+ "#include <winsock2.h>\n#include <ws2tcpip.h>" :
+ "#include <sys/types.h>\n#include <sys/socket.h>"}
 int
@@ -48,2 +49,3 @@
 {
+  struct in6_addr dummy;
   socket(AF_INET6, SOCK_STREAM, 0);
---- ここまで ----


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next