From: Robert Klemme Date: 2008-10-17T20:24:30+09:00 Subject: Re: socket recv or gets? On 17.10.2008 12:09, Jamal Soueidan wrote: > Robert Klemme wrote: >> On 17.10.2008 09:40, Jamal Soueidan wrote: >>> print out the message? >>> >>> Why? :D >> See documentation. #gets tries to read a line (i.e. until it sees a line >> terminator). Also, I believe recv also works with UDP while I am not >> sure about gets. >> >> Cheers >> >> robert > > Hmm, I looked before at documentation and they wrote... > > "A separator of nil reads the entire contents..." > > so I did :) > > @data = gets() Look again. http://www.ruby-doc.org/core/classes/IO.html#M002297 Note, that instead of gets(nil) you can as well use read. > But my code stops after that and wouldn't continue? even though > gets(nil) is the same, I also tried that, didn't work. You need to understand blocking IO: the IO operation blocks until everything is read. In case of a socket, it will only return if there was an error or the other party closed the socket. So, you need to define the protocol in a way that you either know beforehand how much you need to read (then you can use read(length) or recv(length)) or you need a separator that you can use to recognize message end (then you can use gets(separator)). Kind regards robert