From 5545c5aafa2204fe3b50d7c465e8fb542f338dd2 Mon Sep 17 00:00:00 2001 From: shugo Date: Fri, 17 Oct 2008 02:50:43 +0000 Subject: [PATCH] * ext/socket/socket.c (init_sock): sockets should be binmode. * test/socket/test_tcp.rb (test_encoding): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ ext/socket/socket.c | 4 +--- test/socket/test_tcp.rb | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e26526c896..bac981b917 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Oct 17 11:48:18 2008 Shugo Maeda + + * ext/socket/socket.c (init_sock): sockets should be binmode. + + * test/socket/test_tcp.rb (test_encoding): ditto. + Fri Oct 17 10:26:13 2008 NAKAMURA Usaku * tool/insns2vm.rb: remove -Kn option in shebang line because it's diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 949a9a13f4..65e7d9827f 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -241,9 +241,7 @@ init_sock(VALUE sock, int fd) MakeOpenFile(sock, fp); fp->fd = fd; fp->mode = FMODE_READWRITE|FMODE_DUPLEX; -#if defined(_WIN32) || defined(__CYGWIN__) || defined(__EMX__) - fp->mode |= FMODE_BINMODE; -#endif + rb_io_binmode(sock); if (do_not_reverse_lookup) { fp->mode |= FMODE_NOREVLOOKUP; } diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index 3aa7be82c3..c623c1b58c 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -21,4 +21,23 @@ assert false, "TODO: doesn't work on mswin32/64" if /mswin/ =~ RUBY_PLATFORM th.kill th.join end + + def test_encoding + svr = TCPServer.new("localhost", 0) + th = Thread.new { + c = svr.accept + c.write "foo\r\n" + c.close + } + addr = svr.addr + sock = TCPSocket.open(addr[2], addr[1]) + assert_equal(true, sock.binmode?) + s = sock.gets + assert_equal("foo\r\n", s) + assert_equal(Encoding.find("ASCII-8BIT"), s.encoding) + ensure + th.kill + th.join + sock.close if sock + end end if defined?(TCPSocket)