Writing a 4 byte Integer to socket

I need to write a value (it should be a Fixnum, but I’m not sure) over
a TCPSocket.
How can I write it in a typical “4 bytes, network byte order” style?

And what if I need to compose a byte and send it over the network?
Is BitVector the only choice?

Hi,

I need to write a value (it should be a Fixnum, but I’m not sure) over
a TCPSocket.
How can I write it in a typical “4 bytes, network byte order” style?

And what if I need to compose a byte and send it over the network?
Is BitVector the only choice?

Array#pack is probably what you’re looking for…
http://www.rubycentral.com/ref/ref_c_array.html#pack
(the table showing the template characters for pack is a
few pages up in that document… search for “Template
characters for Array#pack”)

Hope this helps,

Bill

···

From: “gabriele renzi” surrender_it@rc1.vip.lng.yahoo.com

For an example of this in real code, install druby and look at drb/drb.rb
functions ‘dump’ and ‘load’, which send or receive a marshalled object
preceded by a 4-byte size value:

def dump(obj)
  obj = DRbObject.new(obj) if obj.kind_of? DRbUndumped
  begin
    str = Marshal::dump(obj)
  rescue
    str = Marshal::dump(DRbObject.new(obj))
  end
  [str.size].pack('N') + str
end

def load(soc)
  sz = soc.read(4)  # sizeof (N)
  raise(DRbConnError, 'connection closed') if sz.nil?
  raise(DRbConnError, 'premature header') if sz.size < 4
  sz = sz.unpack('N')[0]
  raise(DRbConnError, "too large packet #{sz}") if @load_limit < sz
  str = soc.read(sz)
  ... snip rest

Regards,

Brian.

···

On Mon, Mar 31, 2003 at 03:08:49AM +0900, Bill Kelly wrote:

From: “gabriele renzi” surrender_it@rc1.vip.lng.yahoo.com

I need to write a value (it should be a Fixnum, but I’m not sure) over
a TCPSocket.
How can I write it in a typical “4 bytes, network byte order” style?

And what if I need to compose a byte and send it over the network?
Is BitVector the only choice?

Array#pack is probably what you’re looking for…
http://www.rubycentral.com/ref/ref_c_array.html#pack
(the table showing the template characters for pack is a
few pages up in that document… search for “Template
characters for Array#pack”)

thanks Brian and Bill !
that is actually what I need.

I’d never thought about looking at drb, I was thinking about looking
at net/* but the protocols are all characteri-oriented, and I need
to write a client for a packet based protocol…

···

il Mon, 31 Mar 2003 06:52:42 +0900, Brian Candler B.Candler@pobox.com ha scritto::

For an example of this in real code, install druby and look at drb/drb.rb
functions ‘dump’ and ‘load’, which send or receive a marshalled object
preceded by a 4-byte size value: