diff options
Diffstat (limited to 'src/rhctl/noptcp.go')
-rw-r--r-- | src/rhctl/noptcp.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/rhctl/noptcp.go b/src/rhctl/noptcp.go new file mode 100644 index 0000000..66495ec --- /dev/null +++ b/src/rhctl/noptcp.go @@ -0,0 +1,68 @@ +// +// rhctl +// +// Copyright (C) 2009-2016 Christian Pointner <equinox@helsinki.at> +// +// This file is part of rhctl. +// +// rhctl 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. +// +// rhctl 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 rhctl. If not, see <http://www.gnu.org/licenses/>. +// + +package main + +import ( + "net" +) + +type NopTCPInterface struct { + ln net.Listener + ctrl *SwitchControl +} + +func handleClient(con net.Conn, ctrl *SwitchControl) { + con.Write([]byte("hello world")) + con.Close() +} + +func (nop *NopTCPInterface) Run() { + rhdl.Printf("NopTCP: handler running...") + + for { + con, err := nop.ln.Accept() + if err != nil { + switch err.(type) { + case *net.OpError: + if !err.(*net.OpError).Temporary() { + rhl.Printf("NopTCP: server exiting: %s", err) + return + } + default: + rhl.Printf("NopTCP: server exiting: %s", err) + return + } + } + go handleClient(con, nop.ctrl) + } +} + +func NopTCPInit(conf *Config, ctrl *SwitchControl) (nop *NopTCPInterface, err error) { + nop = &NopTCPInterface{} + nop.ctrl = ctrl + if nop.ln, err = net.Listen("tcp", conf.Clients.Noptcp.Address); err != nil { + return + } + rhdl.Printf("NopTCP: listening on %s", nop.ln.Addr()) + + return +} |