+func l_dtime(l *lua.LState) int {
+ l.Push(lua.LNumber(time.Since(lastTime).Seconds()))
+ return 1
+}
+
+func l_canceled(l *lua.LState) int {
+ l.Push(lua.LBool(canceled))
+ return 1
+}
+
+func l_poll(l *lua.LState) int {
+ client, pkt, timeout := doPoll(l, getClients(l))
+ if client == nil {
+ l.Push(lua.LNil)
+ } else {
+ l.Push(client.userdata)
+ }
+ l.Push(tolua.Pkt(l, pkt))
+ l.Push(lua.LBool(timeout))
+ return 3
+}
+
+func l_disconnect(l *lua.LState) int {
+ for _, client := range getClients(l) {
+ client.disconnect()
+ }
+
+ return 0
+}
+