diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-06-30 06:10:02 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-06-30 06:10:02 +0000 |
commit | 167727be3cefb3f45a26b0b1d96dc94a900a84b4 (patch) | |
tree | bb07db0d01dbdebe6b25162b25fbeefc2ee19d05 /samples | |
parent | bd54cd42d4c8a7d6bb9550d8aa0eac243cda63c0 (diff) | |
download | luasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.tar.gz luasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.tar.bz2 luasocket-167727be3cefb3f45a26b0b1d96dc94a900a84b4.zip |
Bug in usocket_recv...
Diffstat (limited to 'samples')
-rw-r--r-- | samples/tinyirc.lua | 42 |
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 | ----------------------------------------------------------------------------- |
7 | host = host or "*" | 7 | host = host or "*" |
8 | port1 = port1 or 8080 | 8 | port1 = port1 or 8080 |
9 | port2 = port2 or 8081 | 9 | port2 = port2 or 8181 |
10 | if arg then | 10 | if 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 | ||
16 | server1, error = socket.bind(host, port1) | 16 | server1, error = socket.bind(host, port1) |
17 | assert(server1, error) | 17 | assert(server1, error) |
18 | server1:timeout(1) | 18 | server1:timeout(1) -- make sure we don't block in accept |
19 | server2, error = socket.bind(host, port2) | 19 | server2, error = socket.bind(host, port2) |
20 | assert(server2, error) | 20 | assert(server2, error) |
21 | server2:timeout(1) | 21 | server2:timeout(1) -- make sure we don't block in accept |
22 | 22 | ||
23 | io.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 | ||
23 | function newset() | 28 | function 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 |
40 | end | 42 | end |
41 | 43 | ||
42 | sockets = newset() | 44 | set = newset() |
43 | 45 | ||
44 | sockets:insert(server1) | 46 | io.write("Inserting servers in set\n") |
45 | sockets:insert(server2) | 47 | set:insert(server1) |
48 | set:insert(server2) | ||
46 | 49 | ||
47 | while 1 do | 50 | while 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 |