diff options
Diffstat (limited to 'src/echo_server.lua')
-rw-r--r-- | src/echo_server.lua | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/echo_server.lua b/src/echo_server.lua new file mode 100644 index 0000000..ee23cb1 --- /dev/null +++ b/src/echo_server.lua @@ -0,0 +1,69 @@ +-- +-- anylike +-- +-- anylike is a ... +-- +-- +-- Copyright (C) 2007-2008 Markus Grueneis <gimpf@anylike.org> +-- Christian Pointner <equinox@anylike.org> +-- +-- This file is part of anylike. +-- +-- anylike is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- any later version. +-- +-- anylike is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with anylike. If not, see <http://www.gnu.org/licenses/>. +-- + +socket = require("socket") + +function echo_server() + local host, port = "localhost", 4500 + local ip, err = socket.dns.toip(host) + if(ip == nil) then + log.print("ERROR", "can't resolve " .. host .. ": " .. err) + return -1 + end + + local udp, err = socket.udp() + if(udp == nil) then + log.print("ERROR", "can't create udp socket") + return -1 + end + + local ret, err = udp:setsockname(ip, port) + if(ret == nil) then + log.print("ERROR", "setsockname(" .. ip .. "," .. port .. ") failed: " .. err) + return -1 + end + + log.print("NOTICE", "echo server listening on " .. ip .. ":" .. port); + + while true do + local dgrm, from_ip, from_port = udp:receivefrom() + if(ret == nil) then + log.print("ERROR", "receivefrom(" .. ip .. "," .. port .. ") failed: " .. from_ip) + return -1 + end + + local ret, err = udp:sendto(dgrm, from_ip, from_port) + if(ret == nil) then + log.print("ERROR", "sendto(" .. ip .. "," .. port .. ") failed: " .. err) + return -1 + end + + if(string.gsub(dgrm, "^(%w+)%s*%c$", "%1") == "quit") then + return 0 + end + end + + return 0 +end |