Hi I am writing some networking code and am having a heck of a time
figuring out how to break on EOT. I was sending an ASCII control
character, but this doesn't work when I send binary data because
sometimes it is seen as the EOT character so breaks early. Here is one
thing I have tried:
server = TCPServer.open(address, port)
loop do
Thread.start(server.accept) do |client|
message = ""
loop do
message << client.recvfrom( 4 )[0]
break if client.eof? == true
end
yield(message, client)
end
end
if I replace the break if client.eof? == true with simply puts
client.eof? it will return false if it is not the end of what is being
sent, otherwise it just hangs there indefinitely. This is only one of
many ways I have tried, client.recvfrom does not seem to return 0 or -1
when no more data is to be sent, it also does not seem to return an
empty string. Pretty much the only way I have gotten this to work is by
looping client.recvfrom and then breaking if the character at -1 in what
it gets is the ASCII control character for EOT. Unfortunately I can not
use that because when I send random binary data there is a chance it
will end on EOT without it being a control character.
Surely there is some easy way to do this, but none of the Ruby
documentation mentions anything about how to and most of the examples do
not even have recv in a loop for some reason.
···
--
Posted via http://www.ruby-forum.com/.