aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.adoc5
-rw-r--r--lib/http/server.go12
-rw-r--r--lib/http/server_options.go6
3 files changed, 21 insertions, 2 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 551b0d3f..a0f4c5cd 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -38,6 +38,11 @@ Legend,
[#v0_61_0]
== pakakeh.go v0.61.0 (2026-xx-xx)
+**🌼 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].
+
**🌱 lib/systemd: new package for socket-based activation**
The `lib/systemd` package implement function `Listeners` that return list of
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().