Weird extension behavior


I’m writing my first extension, which has some low-level networking
functions to interface with some legacy code. I have two functions in
the extension, send, and recv_line, which work with a socket. I’m
testing with ruby 1.8.4 on debian using the echo service (port 7).

As a debugging measure, I had the following code, which works perfectly:
puts socket.send(“hello\n”)
puts socket.recv_line()

If I take the return from the send and place it in a variable, the code
takes exactly three seconds to run, as opposed to nearly instantly:
foo = socket.send(“hello\n”)
puts socket.recv_line()

This causes it to hang forever:
puts socket.recv_line()

Using strace shows that recv_line is getting the hello, but never
receives the newline character. I’m completely baffled. I can post the
C code, but it doesn’t seem like it would necessarily be the source of
the problem. Any input would be greatly appreciated. Thanks.



At Wed, 24 May 2006 11:16:03 +0900,
Brian Krahmer wrote in [ruby-talk:194295]:

puts socket.recv_line()

Some possibilities around puts.

  1. it flushes stdout, and it might take effect about buffering.
  2. it calls its argument’s #to_s method.