Socket recv or gets?

Hello there,

I wonder whats the difference between these methods ( gets and recv )

loop {
      data = current_client.recv(100)
      puts data
}

When I use "gets" instead of recv my socket connection stops and never
print out the message?

Why? :smiley:

Thanks..

···

--
Posted via http://www.ruby-forum.com/.

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

···

On 17.10.2008 09:40, Jamal Soueidan wrote:

Hello there,

I wonder whats the difference between these methods ( gets and recv )

loop {
      data = current_client.recv(100)
      puts data
}

When I use "gets" instead of recv my socket connection stops and never
print out the message?

Why? :smiley:

Robert Klemme wrote:

···

On 17.10.2008 09:40, Jamal Soueidan wrote:

print out the message?

Why? :smiley:

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 :slight_smile:

@data = gets()

But my code stops after that and wouldn't continue? even though
gets(nil) is the same, I also tried that, didn't work.
--
Posted via http://www.ruby-forum.com/\.

Jamal Soueidan wrote:

so I did :slight_smile:

@data = gets()

in analogy to your recv-Example it should look like:
loop {
data = current_client.gets
puts data
}

:wink:
Andi

Robert Klemme wrote:

print out the message?

Why? :smiley:

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 :slight_smile:

@data = gets()

Look again. class IO - RDoc Documentation

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

···

On 17.10.2008 12:09, Jamal Soueidan wrote:

On 17.10.2008 09:40, Jamal Soueidan wrote:

unknown wrote:

Jamal Soueidan wrote:

so I did :slight_smile:

@data = gets()

in analogy to your recv-Example it should look like:
loop {
data = current_client.gets
puts data
}

:wink:
Andi

This doesn't work :slight_smile:

I also tried

while(data = gets)
   p data
end

The code doesn't continue :frowning:

···

--
Posted via http://www.ruby-forum.com/\.