[#398788] Constructor or a Method — Rubyist Rohit <lists@...>

Take for instance this code:

13 messages 2012/09/01

[#398896] how to sum element of array — Edward QU <lists@...>

dear all

19 messages 2012/09/04

[#398936] best coding for limiting a value — Regis d'Aubarede <lists@...>

A) result=value<min ? min : (value > max ? max : value)

17 messages 2012/09/04

[#398962] Long calculation & time limit — toto tartemolle <lists@...>

Hello,

17 messages 2012/09/05

[#398964] Compiling ruby from source on windows — GPad <peterpan105105@...>

Hi to all,=0AI'm trying to compile ruby on my windows 7. I have already a r=

10 messages 2012/09/05

[#398997] OpenURI open method problem — "Derek T." <lists@...>

The code I am referring to looks like this:

12 messages 2012/09/05

[#399002] Parsing through downloaded html — Sybren Kooistra <lists@...>

Hi all,

28 messages 2012/09/06

[#399012] "Hiding" pictures(and source code if it's possible) — "Damián M. González" <lists@...>

Ey guys, how are you?

11 messages 2012/09/06

[#399083] regix in grep or something like this — Ferdous ara <lists@...>

Hi

12 messages 2012/09/07

[#399206] please help me with making script — Charmaine Willemsen <lists@...>

In this example i like to parse birthday and sexe

11 messages 2012/09/11

[#399218] Pathname#to_str withdrawn in 1.9? — matt@... (Matt Neuburg)

Just getting started experimenting with Ruby 1.9 (1.9.3) and my scripts

13 messages 2012/09/12

[#399227] Breaking Down the Block — incag neato <lists@...>

Can someone please explain in plain english how this block treats the

20 messages 2012/09/13

[#399244] ruby Range to array that acts like time objects? — "Jermaine O." <lists@...>

Hello everybody,

15 messages 2012/09/13

[#399293] Ruby on Ubuntu 12.04 LST — Bojan Jordanovski <lists@...>

Hello everybody,

13 messages 2012/09/14

[#399298] wow, YAML / Psych in 1.9.3 is *slow*! — matt@... (Matt Neuburg)

I just started trying Ruby 1.9.3, coming from Ruby 1.8.7, and was

12 messages 2012/09/14

[#399304] Ruby 1.9.3 and OS X Mountain Lion — sto.mar@...

Hi all,

16 messages 2012/09/14

[#399343] Class variables or Class singleton variables? — "Damián M. González" <lists@...>

Guys, how are you?

18 messages 2012/09/15

[#399386] Ruby - is it worth the effort? — neomex <neomex@...>

Hello,

19 messages 2012/09/17
[#399406] Re: Ruby - is it worth the effort? — Roger Pack <lists@...> 2012/09/17

Unfortunately with Ruby for me it's typically "fun and fast development"

[#399409] Re: Ruby - is it worth the effort? — Peter Zotov <whitequark@...> 2012/09/17

Roger Pack писал 17.09.2012 22:06:

[#399491] Re: Ruby - is it worth the effort? — Robert Klemme <shortcutter@...> 2012/09/19

On Mon, Sep 17, 2012 at 8:20 PM, Peter Zotov <whitequark@whitequark.org> wr=

[#399421] Encoding question — Thomas Bednarz <lists@...>

I am new to ruby and play around with it a little bit at the moment. I

17 messages 2012/09/17

[#399441] Bug or feature — Damjan Rems <lists@...>

There has probably been some discussion about this problem so sorry if I

13 messages 2012/09/18

[#399451] Class variables — Aleksander Ciesielski <neomex@...>

Is it obligatory to use instance variables in classes? Can't we just

17 messages 2012/09/18

[#399479] Ruby SQL Select Sum 2 Columns? — Courtney Fay <lists@...>

I have the following definition which is looking at an apache database,

12 messages 2012/09/18

[#399556] still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...>

Hi,

28 messages 2012/09/20
[#399570] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/20

[#399574] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Henry Maddocks wrote in post #1076876:

[#399575] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/21

[#399576] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Could you be so kind as to suggest another book? I mean there are many

[#399585] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Sebastjan H. wrote in post #1076909:

[#399572] How would you allow variable from specific list of Fixnum? — Eliezer Croitoru <eliezer@...>

I have:

11 messages 2012/09/21

[#399623] Very important question - survey — Marc Heiler <lists@...>

Is matz more like a ninja or more like a samurai?

11 messages 2012/09/22

[#399695] inject problem — Roelof Wobben <rwobben@...>

26 messages 2012/09/25

[#399714] could initialize return an existing object instead of a new instance? — Gary Weaver <lists@...>

Is it possible for initialize to return an existing object instead of a

9 messages 2012/09/25

[#399811] Good book for getting started with Ruby? [I code Python!] — Alec Taylor <alec.taylor6@...>

I've learned programming in C++, Python and PHP at University. (also

12 messages 2012/09/28

[#399815] calcaulation with unknown numbers of numbers and options fail — Roelof Wobben <rwobben@...>

11 messages 2012/09/28

Re: Passing Sockets (or other FDs) to target of Exec()

From: Eric Wong <normalperson@...>
Date: 2012-09-06 17:32:59 UTC
List: ruby-talk #399018
Sean Slavik <lists@ruby-forum.com> wrote:
> I've been playing around with an issue that is giving me a bit of a
> headache and I'm hoping someone can point me in a more useful
> direction...
> 
> On a standard startup, I have two variables:
> 
> $nCS = TCPServer.new(HOST, PORT)
> $connected = Array.new

You'll need:

$nCS.close_on_exec = false if $nCS.respond_to?(:close_on_exec=)

for compatibility with Ruby 2.0.0 in the future
Also, you probably don't need $ global variables

> As users connect to $nCS and login, their connection (and user data) is
> passed to $connected.
> 
> I have a command that triggers a function "copyover" that is intended to
> hot-reboot the server, hopefully maintaining the connections. While I've
> tried writing the connections to a file and reloading them that way, the
> closest I seem to have gotten is the following:
> 
> exec "./main.rb", "--copyover", *$nCS, *$connected

You can't just pass an object over the command-line, the
file descriptor number is all you can pass:

exec "./main.rb", "--copyover", $nCS.fileno.to_s, *$connected

> Then passing:
> 
> $nCS = ARGV[1]

You need to convert the file descriptor number back to an object:

$nCS = TCPServer.for_fd(ARGV[1].to_i)

> $connected = ARGV[2]

I think you need to do something similar for $connected, too,
you can't pass over a Ruby array, either, so maybe something
along these lines:

# in the original, stringify a list of integer file descriptors:
# (you'll get something like "4,5,6,7,8")
connected_args = $connected.map do |sock|
  sock.close_on_exec = false if sock.respond_to?(:close_on_exec=)
  sock.fileno.to_s
end.join(",")

exec "./main.rb", "--copyover", $nCS.fileno.to_s, connected_args

# in the exec-ed version:
# parse the stringified list of descriptors:
connected_args = ARGV[2]
connected = connected_args.split(/,/).map do |sockfd|
  # I'm assuming TCPSocket is the correct class based on your use of
  # TCPServer, but any subclass of IO will support for_fd.
  TCPSocket.for_fd(sock_fd)
end

Unrelated to your original problem, you should also check out the
optparse or similar libraries for parsing command-line options.  They
can even handle the split(/,/) part for you.

> Since Exec replaces the process, it should maintain the files until the
> process is destroyed, correct?

Yes.  However, Ruby 2.0.0 will set close_on_exec=true by default,
so you need to set close_on_exec=false to future-proof your code.

> However, this still tells me "ERROR: Caught error in Client Thread:
> Socket is not connected"
> 
> Can anyone point me in the right direction on this? I'm stumped!

Hopefully I didn't make any typos or mistakes in my examples :> But the
basic idea is you can't pass Ruby objects over the command-line (nor can
you marshall IO objects to strings).  Passing stringified file
descriptor numbers is required in your case.

You can also use UNIX sockets with send_io/recv_io, but you still
need to know the class you're recv_io-ing.

In This Thread