init
This commit is contained in:
commit
b38c39030b
22 changed files with 1925 additions and 0 deletions
56
internal/app/server.go
Normal file
56
internal/app/server.go
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func startServers(cfg Config, handler http.Handler) ([]*http.Server, func(), error) {
|
||||
var servers []*http.Server
|
||||
cleanup := func() {}
|
||||
|
||||
if cfg.ListenAddr != "" {
|
||||
srv := &http.Server{Addr: cfg.ListenAddr, Handler: handler}
|
||||
servers = append(servers, srv)
|
||||
go func() {
|
||||
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
log.Printf("tcp server error: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if cfg.UnixSocketPath != "" {
|
||||
if err := os.MkdirAll(filepath.Dir(cfg.UnixSocketPath), 0o755); err != nil {
|
||||
return nil, cleanup, err
|
||||
}
|
||||
_ = os.Remove(cfg.UnixSocketPath)
|
||||
ln, err := net.Listen("unix", cfg.UnixSocketPath)
|
||||
if err != nil {
|
||||
return nil, cleanup, err
|
||||
}
|
||||
if err := os.Chmod(cfg.UnixSocketPath, 0o666); err != nil {
|
||||
return nil, cleanup, err
|
||||
}
|
||||
|
||||
srv := &http.Server{Handler: handler}
|
||||
servers = append(servers, srv)
|
||||
go func() {
|
||||
if err := srv.Serve(ln); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
log.Printf("unix server error: %v", err)
|
||||
}
|
||||
}()
|
||||
cleanup = func() {
|
||||
_ = ln.Close()
|
||||
_ = os.Remove(cfg.UnixSocketPath)
|
||||
}
|
||||
}
|
||||
|
||||
if len(servers) == 0 {
|
||||
return nil, cleanup, errors.New("no listeners configured, set LISTEN_ADDR and/or UNIX_SOCKET_PATH")
|
||||
}
|
||||
return servers, cleanup, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue