@ -37,9 +37,11 @@ Since I couldn't come up with a better idea, I just copy-and-pasted both
ListenAndServe and ListenAndServeTLS here more - or - less verbatim . "Oh well!"
ListenAndServe and ListenAndServeTLS here more - or - less verbatim . "Oh well!"
* /
* /
type server http . Server
// Type Server is exactly the same as an http.Server, but provides more graceful
// implementations of its methods.
type Server http . Server
func ( srv * server ) Serve ( l net . Listener ) ( err error ) {
func ( srv * S erver) Serve ( l net . Listener ) ( err error ) {
go func ( ) {
go func ( ) {
<- kill
<- kill
l . Close ( )
l . Close ( )
@ -71,7 +73,7 @@ func (srv *server) Serve(l net.Listener) (err error) {
// About 200 years, also known as "forever"
// About 200 years, also known as "forever"
const forever time . Duration = 200 * 365 * 24 * time . Hour
const forever time . Duration = 200 * 365 * 24 * time . Hour
func ( srv * s erver) ListenAndServe ( ) error {
func ( srv * S erver) ListenAndServe ( ) error {
addr := srv . Addr
addr := srv . Addr
if addr == "" {
if addr == "" {
addr = ":http"
addr = ":http"
@ -83,7 +85,7 @@ func (srv *server) ListenAndServe() error {
return srv . Serve ( l )
return srv . Serve ( l )
}
}
func ( srv * s erver) ListenAndServeTLS ( certFile , keyFile string ) error {
func ( srv * S erver) ListenAndServeTLS ( certFile , keyFile string ) error {
addr := srv . Addr
addr := srv . Addr
if addr == "" {
if addr == "" {
addr = ":https"
addr = ":https"
@ -114,18 +116,18 @@ func (srv *server) ListenAndServeTLS(certFile, keyFile string) error {
// ListenAndServe behaves exactly like the net/http function of the same name.
// ListenAndServe behaves exactly like the net/http function of the same name.
func ListenAndServe ( addr string , handler http . Handler ) error {
func ListenAndServe ( addr string , handler http . Handler ) error {
server := & s erver{ Addr : addr , Handler : handler }
server := & S erver{ Addr : addr , Handler : handler }
return server . ListenAndServe ( )
return server . ListenAndServe ( )
}
}
// ListenAndServeTLS behaves exactly like the net/http function of the same name.
// ListenAndServeTLS behaves exactly like the net/http function of the same name.
func ListenAndServeTLS ( addr , certfile , keyfile string , handler http . Handler ) error {
func ListenAndServeTLS ( addr , certfile , keyfile string , handler http . Handler ) error {
server := & s erver{ Addr : addr , Handler : handler }
server := & S erver{ Addr : addr , Handler : handler }
return server . ListenAndServeTLS ( certfile , keyfile )
return server . ListenAndServeTLS ( certfile , keyfile )
}
}
// Serve behaves exactly like the net/http function of the same name.
// Serve behaves exactly like the net/http function of the same name.
func Serve ( l net . Listener , handler http . Handler ) error {
func Serve ( l net . Listener , handler http . Handler ) error {
server := & s erver{ Handler : handler }
server := & S erver{ Handler : handler }
return server . Serve ( l )
return server . Serve ( l )
}
}