aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2003-06-30 06:10:02 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2003-06-30 06:10:02 +0000
commit167727be3cefb3f45a26b0b1d96dc94a900a84b4 (patch)
treebb07db0d01dbdebe6b25162b25fbeefc2ee19d05 /samples
parentbd54cd42d4c8a7d6bb9550d8aa0eac243cda63c0 (diff)
downloadluasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.tar.gz
luasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.tar.bz2
luasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.zip
Bug in usocket_recv...
Diffstat (limited to 'samples')
-rw-r--r--samples/tinyirc.lua42
1 files changed, 22 insertions, 20 deletions
diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua
index 0ad00ab..d9cb896 100644
--- a/samples/tinyirc.lua
+++ b/samples/tinyirc.lua
@@ -6,7 +6,7 @@
6----------------------------------------------------------------------------- 6-----------------------------------------------------------------------------
7host = host or "*" 7host = host or "*"
8port1 = port1 or 8080 8port1 = port1 or 8080
9port2 = port2 or 8081 9port2 = port2 or 8181
10if arg then 10if arg then
11 host = arg[1] or host 11 host = arg[1] or host
12 port1 = arg[2] or port1 12 port1 = arg[2] or port1
@@ -15,11 +15,16 @@ end
15 15
16server1, error = socket.bind(host, port1) 16server1, error = socket.bind(host, port1)
17assert(server1, error) 17assert(server1, error)
18server1:timeout(1) 18server1:timeout(1) -- make sure we don't block in accept
19server2, error = socket.bind(host, port2) 19server2, error = socket.bind(host, port2)
20assert(server2, error) 20assert(server2, error)
21server2:timeout(1) 21server2:timeout(1) -- make sure we don't block in accept
22 22
23io.write("Servers bound\n")
24
25-- simple set implementation
26-- the select function doesn't care about what is passed to it as long as
27-- it behaves like a table
23function newset() 28function newset()
24 local reverse = {} 29 local reverse = {}
25 local set = {} 30 local set = {}
@@ -32,46 +37,43 @@ function newset()
32 table.remove(set, reverse[value]) 37 table.remove(set, reverse[value])
33 reverse[value] = nil 38 reverse[value] = nil
34 end, 39 end,
35 id = function(set, value)
36 return reverse[value]
37 end
38 }}) 40 }})
39 return set 41 return set
40end 42end
41 43
42sockets = newset() 44set = newset()
43 45
44sockets:insert(server1) 46io.write("Inserting servers in set\n")
45sockets:insert(server2) 47set:insert(server1)
48set:insert(server2)
46 49
47while 1 do 50while 1 do
48 local readable, _, error = socket.select(sockets, nil) 51 local readable, _, error = socket.select(set, nil)
49 for _, input in readable do 52 for _, input in readable do
50 -- is it a server socket? 53 -- is it a server socket?
51 local id = sockets:id(input)
52 if input == server1 or input == server2 then 54 if input == server1 or input == server2 then
55 io.write("Waiting for clients\n")
53 local new = input:accept() 56 local new = input:accept()
54 if new then 57 if new then
55 new:timeout(1) 58 new:timeout(1)
56 sockets:insert(new) 59 io.write("Inserting client in set\n")
57 io.write("Server ", id, " got client ", sockets:id(new), "\n") 60 set:insert(new)
58 end 61 end
59 -- it is a client socket 62 -- it is a client socket
60 else 63 else
61 local line, error = input:receive() 64 local line, error = input:receive()
62 if error then 65 if error then
63 input:close() 66 input:close()
64 io.write("Removing client ", id, "\n") 67 io.write("Removing client from set\n")
65 sockets:remove(input) 68 set:remove(input)
66 else 69 else
67 io.write("Broadcasting line '", id, "> ", line, "'.\n") 70 io.write("Broadcasting line '", line, "'\n")
68 __, writable, error = socket.select(nil, sockets, 1) 71 __, writable, error = socket.select(nil, set, 1)
69 if not error then 72 if not error then
70 for ___, output in writable do 73 for ___, output in writable do
71 io.write("Sending to client ", sockets:id(output), "\n") 74 output:send(line .. "\n")
72 output:send(id, "> ", line, "\r\n")
73 end 75 end
74 else io.write("No one ready to listen!!!\n") end 76 else io.write("No client ready to receive!!!\n") end
75 end 77 end
76 end 78 end
77 end 79 end