>>>>> "BCoish" == BCoish  <BCoish / Dymaxion.ca> writes:

BCoish> I've run into a problem that I'm hoping is not unique.  I am
BCoish> learning TCP/IP programming in Ruby and the following code
BCoish> generates a strange result:

The original code doesn't work on a Linux machine either.  Here's
slightly altered code that probably will do what you want.

[jeremyhi@rapier ruby]$ cat client.rb
# CLIENT.RB 
# ========= 
require 'socket' 
s=TCPSocket.new("localhost", ARGV[0]) 
s.write("test\n") 
puts s.gets 
s.close()
[jeremyhi@rapier ruby]$


Change server.rb to only read from the client 1 time.

[jeremyhi@rapier ruby]$ cat server.rb
# SERVER.RB 
# ========= 
require "socket" 
gs = TCPserver.open(0) 
printf("server is on port %d\n", gs.addr[1]) 
s = gs.accept 
line = s.gets
puts line
s.write(line.upcase) 
s.close 
 
BCoish> The preceeding code is used to run a server that accepts a
BCoish> single client. The client sends the server a string, the server
BCoish> reads and converts the string to uppercase and then sends it
BCoish> back to the client.

The server as originally written reads from the client twice, once for
each 'gets'.  Since the client is only writing once to the server this
is probably the underlying issue.

BCoish> That's how it's supposed to work and on the PC it does work.
BCoish> However, on OpenVMS the client requires two, consecutive reads
BCoish> in order to get the uppercased value from the server (i.e. first
BCoish> read returns the original string "test"; second read returns the
BCoish> modified string sent back by the server "TEST").  This leads me
BCoish> to believe it's an internal buffer problem. Before I speculate
BCoish> further I wanted to ask if anyone has come across this before
BCoish> and what may be the cause of it.

enjoy,

-jeremy