Hello Rubyists,

I've been messing around with socket programming in Ruby lately, and I've 
hit a snag with some of my experiments.  My first, (successful), 
experiment was to create a basic client/server script wherein the client 
sends a string to the server, and the server responds by simply writing 
the string back to the client...that code is as follows:

Server:
#####################################
require 'socket'

class PingServer < TCPServer

  def start_server
    loop do
      Thread.start(self.accept) do |s|
        p "Connection accepted from server #{s.inspect}"
        request = s.readline.gsub(/\n$/, '')
        p "Request was #{request}"
        s.write "Your request was as follows: #{request}"
        s.write Time.now if request == 'time'
        s.close
        p "Connection #{s} closed"
      end
    end
  end

end

PingServer.new('localhost', 3000).start_server

###############################################



The client code is thus:
########################################
  require 'socket'
  
  

  def send_message(message)
    TCPSocket.open('localhost', 3000) do |client|
      client.write(message)
      stuff =  client.read(100)
      client.close
      p stuff
      get_message
    end
  end
  
  def get_message
    message = gets
    send_message(message) unless message.gsub(/\n/, '') == 'quit'
    exit  
  end
  
  
  get_message

##################################

As I said, the above code works as expected, I start the server, then run 
the client program...I can send strings to the server all day long, and 
the server writes them right back to me.

The problem occurs when I try to send the following instead of a string:

Marshal.dump(%w(foo bar baz))

Sending the resulting string over the wire causes the server to hang...it 
doesn't return the string back to the client...I'm at a loss to figure 
out why it seems to have trouble handling the string...

Ideas would be appreciated!!

Thanks

Steve