also add error channel
This commit is contained in:
parent
392dd2f2df
commit
6ad68826eb
|
@ -6,7 +6,6 @@
|
|||
|
||||
package main
|
||||
|
||||
/* TODO log package */
|
||||
import (
|
||||
"os"
|
||||
"flag"
|
||||
|
@ -215,14 +214,17 @@ func main() {
|
|||
// The server
|
||||
var srv *server
|
||||
quit := make(chan bool)
|
||||
go dns.ListenAndServe(*sserver, srv, quit)
|
||||
err := make(chan os.Error)
|
||||
go dns.ListenAndServe(*sserver, srv, quit, err)
|
||||
|
||||
forever:
|
||||
for {
|
||||
// Wait for a signal to stop
|
||||
select {
|
||||
case e := <-err:
|
||||
fmt.Printf("Error received, stopping: %s\n", e.String())
|
||||
case <-signal.Incoming:
|
||||
println("Signal received, stopping")
|
||||
fmt.Printf("Signal received, stopping")
|
||||
quit <- true
|
||||
break forever
|
||||
}
|
||||
|
|
|
@ -101,12 +101,16 @@ func main() {
|
|||
|
||||
var srv *server
|
||||
ch := make(chan bool)
|
||||
go dns.ListenAndServe("127.0.0.1:8053", srv, ch)
|
||||
e := make(chan os.Error)
|
||||
go dns.ListenAndServe("127.0.0.1:8053", srv, ch, e)
|
||||
|
||||
forever:
|
||||
for {
|
||||
// Wait for a signal to stop
|
||||
select {
|
||||
case err := <-e:
|
||||
fmt.Printf("Error: %s\n", err.String())
|
||||
break forever
|
||||
case <-signal.Incoming:
|
||||
println("Signal received, stopping")
|
||||
ch <- true
|
||||
|
|
|
@ -49,17 +49,21 @@ func (s *server) ReplyTCP(c *net.TCPConn, a net.Addr, in []byte) {
|
|||
func main() {
|
||||
var srv *server
|
||||
ch := make(chan bool)
|
||||
go dns.ListenAndServe("127.0.0.1:8053", srv, ch)
|
||||
e := make(chan os.Error)
|
||||
go dns.ListenAndServe("127.0.0.1:8053", srv, ch, e)
|
||||
|
||||
forever:
|
||||
for {
|
||||
// Wait for a signal to stop
|
||||
select {
|
||||
case err := <-e:
|
||||
fmt.Printf("Error received, stopping: %s\n", err.String())
|
||||
break forever
|
||||
case <-signal.Incoming:
|
||||
println("Signal received, stopping")
|
||||
fmt.Printf("Signal received, stopping")
|
||||
ch <- true
|
||||
break forever
|
||||
}
|
||||
}
|
||||
close(ch)
|
||||
close(ch)
|
||||
}
|
||||
|
|
19
server.go
19
server.go
|
@ -133,25 +133,30 @@ func accepterTCP(l *net.TCPListener, ch chan *Request, quit chan bool) {
|
|||
//
|
||||
// var m *myserv
|
||||
// ch := make(chan bool)
|
||||
// go dns.ListenAndServe("127.0.0.1:8053", m, ch)
|
||||
// e := make(chan os.Error)
|
||||
// go dns.ListenAndServe("127.0.0.1:8053", m, ch, e)
|
||||
// m <- true // stop the goroutine
|
||||
func ListenAndServe(addr string, handler Handler, q chan bool) os.Error {
|
||||
func ListenAndServe(addr string, handler Handler, q chan bool, e chan os.Error) {
|
||||
ta, err := net.ResolveTCPAddr(addr)
|
||||
if err != nil {
|
||||
return err
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
lt, err := net.ListenTCP("tcp", ta)
|
||||
if err != nil {
|
||||
return err
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
ua, err := net.ResolveUDPAddr(addr)
|
||||
if err != nil {
|
||||
return err
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
lu, err := net.ListenUDP("udp", ua)
|
||||
if err != nil {
|
||||
return err
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
rc := make(chan *Request)
|
||||
|
@ -177,7 +182,7 @@ func ListenAndServe(addr string, handler Handler, q chan bool) os.Error {
|
|||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
// Send a buffer on the TCP connection.
|
||||
|
|
|
@ -3,6 +3,7 @@ package dns
|
|||
import (
|
||||
"testing"
|
||||
"net"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
@ -57,7 +58,8 @@ func (h *server) ReplyTCP(c *net.TCPConn, a net.Addr, in []byte) {
|
|||
func TestResponder(t *testing.T) {
|
||||
var h *server
|
||||
quit := make(chan bool)
|
||||
go ListenAndServe("127.0.0.1:8053", h, quit)
|
||||
e := make(chan os.Error)
|
||||
go ListenAndServe("127.0.0.1:8053", h, quit, e)
|
||||
time.Sleep(2 * 1e9)
|
||||
quit <- true
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue