aboutsummaryrefslogtreecommitdiff
path: root/samples/tinyirc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'samples/tinyirc.lua')
-rw-r--r--samples/tinyirc.lua19
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-----------------------------------------------------------------------------
7require("socket")
7host = host or "*" 8host = host or "*"
8port1 = port1 or 8080 9port1 = port1 or 8080
9port2 = port2 or 8181 10port2 = port2 or 8181
@@ -13,12 +14,10 @@ if arg then
13 port2 = arg[3] or port2 14 port2 = arg[3] or port2
14end 15end
15 16
16server1, error = socket.bind(host, port1) 17server1 = socket.try(socket.bind(host, port1))
17assert(server1, error) 18server2 = socket.try(socket.bind(host, port2))
18server1:settimeout(1) -- make sure we don't block in accept 19server1:settimeout(1) -- make sure we don't block in accept
19server2, error = socket.bind(host, port2) 20server2:settimeout(1)
20assert(server2, error)
21server2:settimeout(1) -- make sure we don't block in accept
22 21
23io.write("Servers bound\n") 22io.write("Servers bound\n")
24 23
@@ -49,7 +48,7 @@ set:insert(server2)
49 48
50while 1 do 49while 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