Make the udp msg size configurable

This commit is contained in:
Miek Gieben 2012-01-12 22:47:36 +01:00
parent 3078f05f56
commit 189de95957
3 changed files with 10 additions and 7 deletions

1
dns.go
View File

@ -69,6 +69,7 @@ import (
const (
Year68 = 2 << (32 - 1) // For RFC1982 (Serial Arithmetic) calculations in 32 bits.
DefaultMsgSize = 4096 // A standard default for larger than 512 packets.
UDPMsgSize = 1024 // A nice default for servers receiving UDP packets.
MaxMsgSize = 65536 // Largest possible DNS packet.
DefaultTtl = 3600 // Default TTL.
)

View File

@ -81,9 +81,8 @@ func Refused(w ResponseWriter, r *Msg) {
func RefusedHandler() Handler { return HandlerFunc(Refused) }
// ...
func ListenAndServe(addr string, network string, handler Handler) error {
//TODO(mg): make message size configurable....
server := &Server{Addr: addr, Net: network, Handler: handler, UDPSize: DefaultMsgSize}
func ListenAndServe(addr string, network string, handler Handler, size int) error {
server := &Server{Addr: addr, Net: network, Handler: handler, UDPSize: size}
return server.ListenAndServe()
}
@ -142,13 +141,13 @@ type Server struct {
Addr string // address to listen on, ":dns" if empty
Net string // if "tcp" it will invoke a TCP listener, otherwise an UDP one
Handler Handler // handler to invoke, dns.DefaultServeMux if nil
UDPSize int // default buffer to use to read incoming UDP messages
UDPSize int // default buffer to use to read incoming UDP messages
ReadTimeout int64 // the net.Conn.SetReadTimeout value for new connections
WriteTimeout int64 // the net.Conn.SetWriteTimeout value for new connections
TsigSecret map[string]string // secret(s) for Tsig map[<zonename>]<base64 secret>
}
// ...
// ListenAndServe starts a nameserver on the configured address.
func (srv *Server) ListenAndServe() error {
addr := srv.Addr
if addr == "" {
@ -235,6 +234,9 @@ func (srv *Server) ServeUDP(l *net.UDPConn) error {
if handler == nil {
handler = DefaultServeMux
}
if srv.UDPSize == 0 {
srv.UDPSize = UDPMsgSize
}
for {
m := make([]byte, srv.UDPSize)
n, a, e := l.ReadFromUDP(m)

View File

@ -18,7 +18,7 @@ func HelloServer(w ResponseWriter, req *Msg) {
func TestServing(t *testing.T) {
HandleFunc("miek.nl.", HelloServer)
go func() {
err := ListenAndServe(":8053", "udp", nil)
err := ListenAndServe(":8053", "udp", nil, 0)
if err != nil {
t.Log("ListenAndServe: ", err.Error())
t.Fail()
@ -32,7 +32,7 @@ func BenchmarkServing(b *testing.B) {
// Again start a server
HandleFunc("miek.nl.", HelloServer)
go func() {
ListenAndServe("127.0.0.1:8053", "udp", nil)
ListenAndServe("127.0.0.1:8053", "udp", nil, 0)
}()
c := NewClient()