diff options
Diffstat (limited to 'samples/tinyirc.lua')
-rw-r--r-- | samples/tinyirc.lua | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua index b48b90a..eac979d 100644 --- a/samples/tinyirc.lua +++ b/samples/tinyirc.lua | |||
@@ -4,6 +4,7 @@ | |||
4 | -- Author: Diego Nehab | 4 | -- Author: Diego Nehab |
5 | -- RCS ID: $Id$ | 5 | -- RCS ID: $Id$ |
6 | ----------------------------------------------------------------------------- | 6 | ----------------------------------------------------------------------------- |
7 | require("socket") | ||
7 | host = host or "*" | 8 | host = host or "*" |
8 | port1 = port1 or 8080 | 9 | port1 = port1 or 8080 |
9 | port2 = port2 or 8181 | 10 | port2 = port2 or 8181 |
@@ -13,12 +14,10 @@ if arg then | |||
13 | port2 = arg[3] or port2 | 14 | port2 = arg[3] or port2 |
14 | end | 15 | end |
15 | 16 | ||
16 | server1, error = socket.bind(host, port1) | 17 | server1 = socket.try(socket.bind(host, port1)) |
17 | assert(server1, error) | 18 | server2 = socket.try(socket.bind(host, port2)) |
18 | server1:settimeout(1) -- make sure we don't block in accept | 19 | server1:settimeout(1) -- make sure we don't block in accept |
19 | server2, error = socket.bind(host, port2) | 20 | server2:settimeout(1) |
20 | assert(server2, error) | ||
21 | server2:settimeout(1) -- make sure we don't block in accept | ||
22 | 21 | ||
23 | io.write("Servers bound\n") | 22 | io.write("Servers bound\n") |
24 | 23 | ||
@@ -49,7 +48,7 @@ set:insert(server2) | |||
49 | 48 | ||
50 | while 1 do | 49 | while 1 do |
51 | local readable, _, error = socket.select(set, nil) | 50 | local readable, _, error = socket.select(set, nil) |
52 | for _, input in readable do | 51 | for _, input in ipairs(readable) do |
53 | -- is it a server socket? | 52 | -- is it a server socket? |
54 | if input == server1 or input == server2 then | 53 | if input == server1 or input == server2 then |
55 | io.write("Waiting for clients\n") | 54 | io.write("Waiting for clients\n") |
@@ -68,10 +67,12 @@ while 1 do | |||
68 | set:remove(input) | 67 | set:remove(input) |
69 | else | 68 | else |
70 | io.write("Broadcasting line '", line, "'\n") | 69 | io.write("Broadcasting line '", line, "'\n") |
71 | __, writable, error = socket.select(nil, set, 1) | 70 | writable, error = socket.skip(1, socket.select(nil, set, 1)) |
72 | if not error then | 71 | if not error then |
73 | for ___, output in writable do | 72 | for __, output in ipairs(writable) do |
74 | output:send(line .. "\n") | 73 | if output ~= input then |
74 | output:send(line .. "\n") | ||
75 | end | ||
75 | end | 76 | end |
76 | else io.write("No client ready to receive!!!\n") end | 77 | else io.write("No client ready to receive!!!\n") end |
77 | end | 78 | end |