aboutsummaryrefslogtreecommitdiff
path: root/lib/http
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-02-02 16:22:48 +0700
committerShulhan <ms@kilabit.info>2026-02-02 16:28:11 +0700
commit1e3bb9be8444082dc1ada7f76a727b9a9f764d47 (patch)
treef2128fc6e0660cc0d672bf886c593e1b87a5c014 /lib/http
parent23c576b28ac9bd180155e99f5f07f9d0bac3436e (diff)
downloadpakakeh.go-1e3bb9be8444082dc1ada7f76a727b9a9f764d47.tar.xz
lib/http: add field Listener to ServerOptions
The field Listener allow user to pass [net.Listener] for accepting new connection using [http.Serve] or [http.ServeTLS].
Diffstat (limited to 'lib/http')
-rw-r--r--lib/http/server.go12
-rw-r--r--lib/http/server_options.go6
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/http/server.go b/lib/http/server.go
index 4c89032b..76713308 100644
--- a/lib/http/server.go
+++ b/lib/http/server.go
@@ -352,9 +352,17 @@ func (srv *Server) ServeHTTP(res http.ResponseWriter, req *http.Request) {
// Start the HTTP server.
func (srv *Server) Start() (err error) {
if srv.Server.TLSConfig == nil {
- err = srv.Server.ListenAndServe()
+ if srv.Options.Listener == nil {
+ err = srv.Server.ListenAndServe()
+ } else {
+ err = srv.Server.Serve(srv.Options.Listener)
+ }
} else {
- err = srv.Server.ListenAndServeTLS("", "")
+ if srv.Options.Listener == nil {
+ err = srv.Server.ListenAndServeTLS(``, ``)
+ } else {
+ err = srv.Server.ServeTLS(srv.Options.Listener, ``, ``)
+ }
}
if errors.Is(err, http.ErrServerClosed) {
err = nil
diff --git a/lib/http/server_options.go b/lib/http/server_options.go
index 9ccb3e65..d51fe381 100644
--- a/lib/http/server_options.go
+++ b/lib/http/server_options.go
@@ -6,6 +6,7 @@ package http
import (
"io"
"log"
+ "net"
"net/http"
"git.sr.ht/~shulhan/pakakeh.go/lib/memfs"
@@ -13,6 +14,11 @@ import (
// ServerOptions define an options to initialize HTTP server.
type ServerOptions struct {
+ // Listener define the network listener to be used for serving HTTP
+ // connection.
+ // The Listener can be activated using systemd socket.
+ Listener net.Listener
+
// Memfs contains the content of file systems to be served in memory.
// The MemFS instance to be served should be already embedded in Go
// file, generated using memfs.MemFS.GoEmbed().