diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ext/socket/socket.c | 4 | ||||
-rw-r--r-- | test/socket/test_tcp.rb | 19 |
3 files changed, 26 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Fri Oct 17 11:48:18 2008 Shugo Maeda <shugo@ruby-lang.org> + + * 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 <usa@ruby-lang.org> * 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) |