On Jan 21, 2009, at 14:46 PM, Chris Birkinshaw wrote:

> I am connecting to a server and then waiting to receive messages over
> the socket. For each message received I wish to then execute some  
> code.
>
> I have tried recv, gets, and readpartial all with no luck.
>
> I tried something like this:
>
> loop {
>  data = socket.recv( 100 )
>  puts "Line received"
>  puts data
> }
>
> What I see when sending messages from the server is that the first
> message is received and printed, then the program hangs for 15 secs,
> then the loop starts but each time the data is empty.
>
> I am obviously doing something really stupid but I've spend hours  
> now on
> this so if someone could hint at how to do this I would be most
> grateful.

Since you didn't post your entire program, we can only be of limited  
assistance.

This program works for me:

$ ruby -rsocket -e 'sv = TCPServer.new nil, 4000; so = sv.accept;  
while data = so.read(10) do p :read => data end'
{:read=>"0123456789"}
{:read=>"\r\n234567\r\n"}
$

It has many flaws, for example it doesn't handle any error conditions,  
and only responds to one connection from the server.

The output you see is from connecting with telnet:

$ telnet localhost 4000
Trying ::1...
Connected to localhost.
Escape character is '^]'.
0123456789
234567
^]
telnet> quit
Connection closed.
$