-- -- anylike -- -- anylike is a ... -- -- -- Copyright (C) 2007-2008 Markus Grueneis -- Christian Pointner -- -- 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 . -- 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