[#387246] newbie question — sunny parker <info@2020proj.com>

i am coming from php and dont seem to quite understand how ruby works

13 messages 2011/09/01

[#387330] installing naive bayes classifier — aya abdelsalam <ayoya_91@...>

Hello

10 messages 2011/09/02

[#387344] Beginner needing help - Writing right-angle triangle program — Kane Williams <theburrick@...>

I've been going through a Haskell tutorial (Just to see what it's like)

12 messages 2011/09/03

[#387356] Which version should I download? — Vladimir Van Bauenhoffer <cluny_gisslaren@...>

Im new to programming and Im thinking of downloading and starting with

17 messages 2011/09/03

[#387392] loops problem — jack jones <shehio_22@...>

for (j = @array.length ; j > counter ; j = j-1) # counter is a variable

13 messages 2011/09/04

[#387469] posts on Unix systems programming — Eric Wong <normalperson@...>

I would like to do a series of mailing list posts on the subject of Unix

28 messages 2011/09/06

[#387530] Unexpected behavior of Ruby array — Suvankar Satpati <suvankar.17@...>

I was going through the exercises at http://rubykoans.com/ and got

11 messages 2011/09/08

[#387544] Executing the output of a look — dwight schrute <spambocks@...>

Hi,

14 messages 2011/09/08

[#387586] Creating a hash from two arrays — simon harrison <simonharrison.uk@...>

Hi. Can anyone help with this? I'd like to end with a hash like so:

15 messages 2011/09/09

[#387596] newbie ruby installation malloc issue — "mark e." <mark_f_edwards@...>

hi all -

12 messages 2011/09/09

[#387614] how to write data in binary to a file? — frank hi <yw_hi@163.com>

Hi,

11 messages 2011/09/10

[#387646] How do I make output generate a float without an excess numbers of decimal places? — Kane Williams <theburrick@...>

For example, my current code is

11 messages 2011/09/11

[#387725] Any downsides to writing paranthesises? — Vladimir Van Bauenhoffer <cluny_gisslaren@...>

Im a newbie programmer who is trying to learn Ruby after having just

18 messages 2011/09/12

[#387811] Get interpreter path — Michal Suchanek <hramrach@...>

Hello,

26 messages 2011/09/14
[#387842] Re: Get interpreter path — Phillip Gawlowski <cmdjackryan@...> 2011/09/14

On Wed, Sep 14, 2011 at 3:35 PM, Michal Suchanek <hramrach@centrum.cz> wrot=

[#387844] Re: Get interpreter path — Michal Suchanek <hramrach@...> 2011/09/14

On 14 September 2011 20:47, Phillip Gawlowski <cmdjackryan@gmail.com> wrote:

[#387814] Tough Ruby Homework — Rory Pascua <rorypascua@...>

I'm trying to take a long piece of text, find a word, and get that word

18 messages 2011/09/14

[#387853] Can I Safely Use Rubinius While Learning? — Aaron Jackson <jacksonaaronc@...>

Greetings,

18 messages 2011/09/15

[#387915] Some newbie questions — Vladimir Van Bauenhoffer <cluny_gisslaren@...>

I got some newbie questions which I would very much appreciate if

14 messages 2011/09/15

[#388003] Ruby Speed Question — Kevin Anon <oblivious.sage@...>

Wrote my first Ruby program recently for a class assignment where we had

12 messages 2011/09/18

[#388078] appending \n to each element in an array — Joe Collins <joec_49@...>

I have an array

13 messages 2011/09/20

[#388123] Turning on a special program at special time and turning off the computer at another special time — "amir e." <aef1370@...>

I decided to write a program in RUBY wherein these items have been done

11 messages 2011/09/21
[#388124] Re: Turning on a special program at special time and turning off the computer at another special time — andrew mcelroy <sophrinix@...> 2011/09/21

That sounds like a program a special program a terrorist would write. Are

[#388198] Conditional statements with multiple arguments — "Thomas B." <sinixlol@...>

Good afternoon everyone,

18 messages 2011/09/24

[#388203] Ruby 1.9.3 RC1 is out — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

19 messages 2011/09/24
[#388208] Re: [ANN] Ruby 1.9.3 RC1 is out — Quintus <sutniuq@...> 2011/09/24

-----BEGIN PGP SIGNED MESSAGE-----

[#388209] Re: [ANN] Ruby 1.9.3 RC1 is out — Chris White <cwprogram@...> 2011/09/24

[#388214] Re: [ANN] Ruby 1.9.3 RC1 is out — Quintus <sutniuq@...> 2011/09/24

-----BEGIN PGP SIGNED MESSAGE-----

[#388216] Re: [ANN] Ruby 1.9.3 RC1 is out — Yusuke Endoh <mame@...> 2011/09/24

Hello,

[#388248] Looking for better/familiar approach to command line opts — "Perl J." <perljunkie@...>

So I guess the warning to the reader upfront is... I'm a bit of a Perl

14 messages 2011/09/25

[#388333] Get all classes from a list of files — Jeroen van Ingen <jeroeningen@...>

I have a list of ruby files. I would like to create objects from all

11 messages 2011/09/28

[#388342] Ruby Syntax @keywords ||= [ ] — Bhavesh Sharma <sharmabhavesh@...>

Sorry if this comes across as a dumb question, but what does the

11 messages 2011/09/28

[#388366] IO.readlines will not accept variable with file name Why? — Joda jenson <jodajen2@...>

I am fairly new to Ruby and I am stuck on this. Would someone have a

13 messages 2011/09/29
[#388368] Re: IO.readlines will not accept variable with file name Why? — Robert Klemme <shortcutter@...> 2011/09/29

On Thu, Sep 29, 2011 at 11:14 AM, Joda jenson <jodajen2@yahoo.com> wrote:

Re: TCPSocket recv's nil with gets() if the server crashes?

From: Robert Klemme <shortcutter@...>
Date: 2011-09-07 07:27:43 UTC
List: ruby-talk #387501
Extending a bit on Eric's excellent reply:

On Wed, Sep 7, 2011 at 8:19 AM, Bill W. <sirwillard42@gmail.com> wrote:
> I don't claim to be much of a programmer, and I am also new to RUBY, so
> hopefully this is a good question.
>
> I am making a client that can connect to a port and read an unknown
> number of lines, like a server banner.
> Since the server doesn't close the connection, the program will not move
> on. =A0To overcome this, I used select() with a timeout, so it will read
> whatever is in the pipe and move on if it gets nothing more within n
> seconds.
>
> Everything worked fine, until I tried crashing the server. =A0I started t=
o
> get a string of nil coming into the client.
>
> Here is the code for the server:
>
> #!/usr/bin/ruby
>
> require 'socket' =A0 =A0 =A0 =A0 =A0 =A0 =A0 # Get sockets from stdlib
>
> server =3D TCPServer.open(2000) =A0# Socket to listen on port 2000
> loop { =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 # Servers run fore=
ver
> =A0client =3D server.accept =A0 =A0 =A0 # Wait for a client to connect
> =A0client.puts(Time.now.ctime) =A0# Send the time to the client
> =A0#Don't close the connection, to simulate an unknown size.

If you do not switch the socket to sync=3Dtrue or invoke #flush here
chances are that the content is still sitting in the internal buffer
(Ruby does buffered IO) when you kill the process.  I suggest to add
client.flush because that has the advantage of still buffering and
explicit delimiting "messages" (which might consist of multiple
lines).  In other words you make the sending explicit.  This is
especially necessary in situations where there are pauses between the
sending of different messages and you want the client to process
messages rather sooner than later.  You could try with

require 'socket'               # Get sockets from stdlib

server =3D TCPServer.open(2000)  # Socket to listen on port 2000
loop {                         # Servers run forever
 client =3D server.accept       # Wait for a client to connect
 client.puts(Time.now.ctime)  # Send the time to the client
 # uncomment to see the difference:
 # client.flush
 sleep 10
 client.puts(Time.now.ctime)  # Send the time to the client
 # uncomment to see the difference:
 # client.flush
 #Don't close the connection, to simulate an unknown size.
}

> }
>
> And my client:
>
> #!/usr/bin/ruby
>
> require 'socket'
>
> host =3D 'localhost'
> port =3D 2000
> sockets =3D Array.new #select() requires an array
> #fill the first index with a socket
> sockets[0] =3D TCPSocket.open(host, port)
> while 1 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0#loop =
till it breaks
> #listen for a read, timeout 10 seconds
> res =3D select(sockets, nil, nil, 10)
> =A0if res !=3D nil =A0#a nil is a timeout and will break
> =A0 =A0 =A0 =A0#THIS PRINTS NIL FOREVER on a server crash
> =A0 =A0puts sockets[0].gets()
> =A0else
> =A0 =A0sockets[0].close
> =A0 =A0break
> =A0end
> end
>
> If the server stays up, the client gets the time, waits 10 seconds for
> more, and just quits and closes.
> If you kill the server before select() times out, you will get an
> infinite loop of 'nil' in the client.
> I used socket[0] instead of a loop to parse read events in res since
> there is only one socket, and it must be the one triggering select. =A0(I
> checked to be sure, res[0] and socket[0] are the same socket)
>
> I could use this 'nil' to show that the server has crashed, but I can't
> help but think it is a symptom of something I've done terribly wrong
> that works for now but will bite me in the future.
>
> Any thoughts on where this 'nil' is from?

See Eric's reply.

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread