যেমনটি yo.ian.g
উত্তর দেওয়া হয়েছে। Go 1.8 এই কার্যকারিতাটিকে স্ট্যান্ডার্ড লাইবে অন্তর্ভুক্ত করেছে।
এর জন্য ন্যূনতম উদাহরণ Go 1.8+
:
server := &http.Server{Addr: ":8080", Handler: handler}
go func() {
if err := server.ListenAndServe(); err != nil {
}
}()
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt)
<-stop
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
}
আসল উত্তর - প্রাক গো 1.8:
উভিলিচিটেলের উত্তরে বিল্ডিং ।
আপনি আপনার নিজস্ব সংস্করণ তৈরি করতে পারেন ListenAndServe
যা কোনটি দেয় io.Closer
এবং অবরুদ্ধ করে না।
func ListenAndServeWithClose(addr string, handler http.Handler) (io.Closer,error) {
var (
listener net.Listener
srvCloser io.Closer
err error
)
srv := &http.Server{Addr: addr, Handler: handler}
if addr == "" {
addr = ":http"
}
listener, err = net.Listen("tcp", addr)
if err != nil {
return nil, err
}
go func() {
err := srv.Serve(tcpKeepAliveListener{listener.(*net.TCPListener)})
if err != nil {
log.Println("HTTP Server Error - ", err)
}
}()
srvCloser = listener
return srvCloser, nil
}
এখানে সম্পূর্ণ কোড উপলব্ধ ।
এইচটিটিপি সার্ভার ত্রুটি সহ বন্ধ হবে
accept tcp [::]:8080: use of closed network connection