[#11822] RCR: Input XML support in the base Ruby — Dave Thomas <Dave@...>

15 messages 2001/03/01

[#11960] Not Ruby, for me, for the moment at least — "Michael Kreuzer" <mkreuzer@... (nospam)>

I wrote on this newsgroup last weekend about how I was considering using

11 messages 2001/03/04

[#12023] French RUG ? — "Jerome" <jeromg@...>

Hi fellow rubyers,

16 messages 2001/03/05

[#12103] disassembling and reassembling a hash — raja@... (Raja S.)

Given a hash, h1, will the following always hold?

20 messages 2001/03/06

[#12204] FEATURE REQUEST: 'my' local variables — Leo Razoumov <see_signature@127.0.0.1>

Ruby is, indeed, a very well designed language.

64 messages 2001/03/07
[#12250] Re: FEATURE REQUEST: 'my' local variables — Leo Razoumov <see_signature@127.0.0.1> 2001/03/07

>>>>> "GK" == GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp> writes:

[#12284] Re: FEATURE REQUEST: 'my' local variables — gotoken@... (GOTO Kentaro) 2001/03/08

In message "[ruby-talk:12250] Re: FEATURE REQUEST: 'my' local variables"

[#12289] Re: FEATURE REQUEST: 'my' local variables — matz@... (Yukihiro Matsumoto) 2001/03/08

Hi,

[#12452] Re: FEATURE REQUEST: 'my' local variables — gotoken@... (GOTO Kentaro) 2001/03/12

In message "[ruby-talk:12289] Re: FEATURE REQUEST: 'my' local variables"

[#12553] Re: FEATURE REQUEST: 'my' local variables — Dave Thomas <Dave@...> 2001/03/13

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#12329] Math package — Mathieu Bouchard <matju@...>

18 messages 2001/03/09

[#12330] Haskell goodies, RCR and challenge — Robert Feldt <feldt@...>

Hi,

19 messages 2001/03/09
[#12374] Re: Haskell goodies, RCR and challenge — matz@... (Yukihiro Matsumoto) 2001/03/10

Hi,

[#12349] Can Ruby-GTK display Gif Png or Jpeg files? — Phlip <phlip_cpp@...>

Ruby-san:

20 messages 2001/03/09

[#12444] class variables — Max Ischenko <max@...>

14 messages 2001/03/12

[#12606] Order, chaos, and change requests :) — Dave Thomas <Dave@...>

17 messages 2001/03/14

[#12635] email address regexp — "David Fung" <dfung@...>

i would like to locate probable email addresses in a bunch of text files,

12 messages 2001/03/14

[#12646] police warns you -- Perl is dangerous!! — Leo Razoumov <see_signature@127.0.0.1>

I just read this story on Slashdot

14 messages 2001/03/14
[#12651] Re: police warns you -- Perl is dangerous!! — pete@... (Pete Kernan) 2001/03/14

On 14 Mar 2001 11:46:35 -0800, Leo Razoumov <see_signature@127.0.0.1> wrote:

[#12691] Re: police warns you -- Perl is dangerous!! — "W. Kent Starr" <elderburn@...> 2001/03/15

On Wednesday 14 March 2001 15:40, Pete Kernan wrote:

[#12709] [OFFTOPIC] Re: police warns you -- Perl is dangerous!! — Stephen White <spwhite@...> 2001/03/16

On Fri, 16 Mar 2001, W. Kent Starr wrote:

[#12655] Re: FEATURE REQUEST: 'my' local variables — "Benjamin J. Tilly" <ben_tilly@...>

>===== Original Message From Leo Razoumov <see_signature@127.0.0.1> =====

18 messages 2001/03/14

[#12706] Library packaging — "Nathaniel Talbott" <ntalbott@...>

I have a project that I'm working on that needs to live two different lives,

30 messages 2001/03/16

[#12840] Looking for a decent compression scheme — Dave Thomas <Dave@...>

14 messages 2001/03/19

[#12895] differences between range and array — "Doug Edmunds" <dae_alt3@...>

This code comes from the online code examples for

16 messages 2001/03/20
[#12896] Re: differences between range and array — "Hee-Sob Park" <phasis@...> 2001/03/20

[#12899] Re: differences between range and array — Jim Freeze <jim@...> 2001/03/20

On Tue, 20 Mar 2001, Hee-Sob Park wrote:

[#12960] TextBox ListBox — Ron Jeffries <ronjeffries@...>

Attached is a little Spike that Chet and I are doing. It is a

13 messages 2001/03/20

[#12991] [ANN] Lapidary 0.2.0 — "Nathaniel Talbott" <ntalbott@...>

Well, here's my first major contribution to the Ruby world: Lapidary. It's a

16 messages 2001/03/20

[#13028] mkmf question — Luigi Ballabio <luigi.ballabio@...>

15 messages 2001/03/21

[#13185] Reading a file backwards — "Daniel Berger" <djberg96@...>

Hi all,

21 messages 2001/03/25
[#13197] Re: Reading a file backwards — "Daniel Berger" <djberg96@...> 2001/03/25

> Hi Dan,

[#13203] Re: Reading a file backwards — Mathieu Bouchard <matju@...> 2001/03/25

On Sun, 25 Mar 2001, Daniel Berger wrote:

[#13210] Re: Reading a file backwards — "Daniel Berger" <djberg96@...> 2001/03/25

"Mathieu Bouchard" <matju@sympatico.ca> wrote in message

[#13374] Passing an array to `exec'? — Lloyd Zusman <ljz@...>

I'd like to do the following:

15 messages 2001/03/31

[#13397] Multidimensional arrays and hashes? — Lloyd Zusman <ljz@...>

Is it possible in ruby to make use of constructs that correspond to

14 messages 2001/03/31

[ruby-talk:12737] Re: Nonblocking Read]

From: "Gardian, Milan" <Milan.Gardian@...>
Date: 2001-03-16 10:44:38 UTC
List: ruby-talk #12737
Hi Alex,

> If anyone out there can help..

Perhaps this will not help you much but attached please find my 'echo
server' variation I used to get acquainted with Ruby and its sockets a
little... It is using timed-out select (200 msec, non-blocking would mean 0
msec :) ) to get lists of sockets ready for reading & writing.

I am using W2k, Ruby 1.6.2.
Hope this helps,

	Milan

Attachments (1)

echo_server_1.rb (3.71 KB, text/x-ruby)
#----------------------------------------------------------
# Show call syntax of this script and leave :)
#----------------------------------------------------------
def UsageAndExit(err)
    print "-------\n"
    print "#{err}!\n"
    print "-------\n"
    print "Usage: #{__FILE__} server_port\n"
    exit 1
end


#----------------------------------------------------------
#We will be using socket extension library
#----------------------------------------------------------
begin
    require "socket"
rescue LoadError
    UsageAndExit "Missing 'socket' extension module"
end


#----------------------------------------------------------
#Define server parameters
#----------------------------------------------------------
buflen = 5
server = 'localhost'

#Port is given on command line
UsageAndExit("Missing port number") if ARGV.size != 1
port = ARGV[0].to_i
UsageAndExit("Incorrect port number") if port == 0


#----------------------------------------------------------
#Create and setup server socket
#----------------------------------------------------------
s = TCPServer.open(port)
n = s.addr
#addr.shift
print "Server is listening at ", n.join(':'), "\n"

#Array of active reads (at the beginning only server socket for accepting connections)
active_readers = [s]

#Array of pending writes
active_writers = []
write_buffer = []

#Enter protected server loop
begin
    loop do
        #Select ready sockets
        selected = select(active_readers, active_writers, [], 0.2)
        next if !selected

        #Go through selected readers and do read from them :)
        for sock in selected[0]

            #Server socket 'reading' means accepting a new connection
            if sock == s
                accepted = s.accept
                new_sock = accepted
                print "New connection: #{new_sock}\n"
                active_readers.push new_sock
                next

            #Normal socket reading: show read data and echo them back
            else
                #recevice data (protected against exceptions)
                data = nil
                begin
                    data = sock.recv buflen
                rescue
                end

                #evaluate data
                if data and (data.size > 0)
                    print "From #{sock} received (total #{data.size}): "; p data
                    active_readers.delete sock
                    active_writers.push sock
                    write_buffer.push data
                else
                    print "Client broke connection: #{sock}\n"
                    sock.shutdown
                    sock.close
                    active_readers.delete sock
                end
            end
        end

        #Go through selected writers and do write to them :)
        for sock in selected[1]

            #Check if everything is OK
            i = active_writers.index(sock)
            throw "Writer was not found in active writers!" if !i
            throw "Write buffer does not contain data for writing!" if write_buffer.size <= i

            #Now send!
            data = write_buffer[i]
            print "echo #{sock} "; p data
            sent = sock.send(data, 0)

            #Anything left to send?
            if (sent < data.size)
                write_buffer[i] = data[sent..data.size]
            else
                write_buffer.delete_at(i)
                active_writers.delete_at(i)
                active_readers.push(sock)
            end
        end
    end
rescue Interrupt
end

#Close all open sockets
print "\n"
print "Server shutdown requested (keyboard interrupt)\n"
active_readers[0].close
active_readers.delete_at(0)
for sock in active_readers + active_writers
    print "Breaking connection: #{sock}\n"
    sock.shutdown
    sock.close
end

In This Thread

Prev Next