处理一些异常
This commit is contained in:
		
							
								
								
									
										20
									
								
								graceful.go
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								graceful.go
									
									
									
									
									
								
							@ -88,7 +88,7 @@ type endlessServer struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
NewServer returns an intialized endlessServer Object. Calling Serve on it will
 | 
			
		||||
NewServer returns an initialized endlessServer Object. Calling Serve on it will
 | 
			
		||||
actually "start" the server.
 | 
			
		||||
*/
 | 
			
		||||
func NewServer(addr string, handler http.Handler) (srv *endlessServer) {
 | 
			
		||||
@ -191,7 +191,7 @@ handler to reply to them. Handler is typically nil, in which case the
 | 
			
		||||
DefaultServeMux is used.
 | 
			
		||||
 | 
			
		||||
In addition to the stl Serve behaviour each connection is added to a
 | 
			
		||||
sync.Waitgroup so that all outstanding connections can be served before shutting
 | 
			
		||||
sync.WaitGroup so that all outstanding connections can be served before shutting
 | 
			
		||||
down the server.
 | 
			
		||||
*/
 | 
			
		||||
func (srv *endlessServer) Serve() (err error) {
 | 
			
		||||
@ -226,7 +226,9 @@ func (srv *endlessServer) ListenAndServe() (err error) {
 | 
			
		||||
	srv.EndlessListener = newEndlessListener(l, srv)
 | 
			
		||||
 | 
			
		||||
	if srv.isChild {
 | 
			
		||||
		syscall.Kill(syscall.Getppid(), syscall.SIGTERM)
 | 
			
		||||
		if err = syscall.Kill(syscall.Getppid(), syscall.SIGTERM); nil != err {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	srv.BeforeBegin(srv.Addr)
 | 
			
		||||
@ -277,7 +279,9 @@ func (srv *endlessServer) ListenAndServeTLS(certFile, keyFile string) (err error
 | 
			
		||||
	srv.EndlessListener = tls.NewListener(srv.tlsInnerListener, config)
 | 
			
		||||
 | 
			
		||||
	if srv.isChild {
 | 
			
		||||
		syscall.Kill(syscall.Getppid(), syscall.SIGTERM)
 | 
			
		||||
		if err = syscall.Kill(syscall.Getppid(), syscall.SIGTERM); nil != err {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Println(syscall.Getpid(), srv.Addr)
 | 
			
		||||
@ -497,8 +501,12 @@ func (el *endlessListener) Accept() (c net.Conn, err error) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tc.SetKeepAlive(true)                  // see http.tcpKeepAliveListener
 | 
			
		||||
	tc.SetKeepAlivePeriod(3 * time.Minute) // see http.tcpKeepAliveListener
 | 
			
		||||
	if err = tc.SetKeepAlive(true); nil != err {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} // see http.tcpKeepAliveListener
 | 
			
		||||
	if err = tc.SetKeepAlivePeriod(3 * time.Minute); nil != err {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} // see http.tcpKeepAliveListener
 | 
			
		||||
 | 
			
		||||
	c = endlessConn{
 | 
			
		||||
		Conn:   tc,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user