|
6 | 6 | "encoding/base64" |
7 | 7 | "fmt" |
8 | 8 | "log" |
| 9 | + "net" |
9 | 10 | "net/http" |
| 11 | + "os" |
10 | 12 | "path/filepath" |
11 | 13 | "slices" |
12 | 14 | "strconv" |
@@ -489,19 +491,47 @@ func (a *application) server() (func() error, func() error) { |
489 | 491 | } |
490 | 492 |
|
491 | 493 | server := http.Server{ |
492 | | - Addr: fmt.Sprintf("%s:%d", a.Config.Server.Host, a.Config.Server.Port), |
493 | 494 | Handler: mux, |
494 | 495 | } |
495 | 496 |
|
496 | 497 | start := func() error { |
497 | | - log.Printf("Starting server on %s:%d (base-url: \"%s\", assets-path: \"%s\")\n", |
498 | | - a.Config.Server.Host, |
499 | | - a.Config.Server.Port, |
500 | | - a.Config.Server.BaseURL, |
501 | | - absAssetsPath, |
502 | | - ) |
503 | | - |
504 | | - if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { |
| 498 | + var listener net.Listener |
| 499 | + var err error |
| 500 | + |
| 501 | + if a.Config.Server.SocketPath != "" { |
| 502 | + // Unix socket mode |
| 503 | + // Remove existing socket file if it exists |
| 504 | + if err := os.RemoveAll(a.Config.Server.SocketPath); err != nil { |
| 505 | + return fmt.Errorf("failed to remove existing socket file: %w", err) |
| 506 | + } |
| 507 | + |
| 508 | + listener, err = net.Listen("unix", a.Config.Server.SocketPath) |
| 509 | + if err != nil { |
| 510 | + return fmt.Errorf("failed to listen on unix socket: %w", err) |
| 511 | + } |
| 512 | + |
| 513 | + log.Printf("Starting server on unix socket %s (base-url: \"%s\", assets-path: \"%s\")\n", |
| 514 | + a.Config.Server.SocketPath, |
| 515 | + a.Config.Server.BaseURL, |
| 516 | + absAssetsPath, |
| 517 | + ) |
| 518 | + } else { |
| 519 | + // TCP mode |
| 520 | + addr := fmt.Sprintf("%s:%d", a.Config.Server.Host, a.Config.Server.Port) |
| 521 | + listener, err = net.Listen("tcp", addr) |
| 522 | + if err != nil { |
| 523 | + return fmt.Errorf("failed to listen on tcp address: %w", err) |
| 524 | + } |
| 525 | + |
| 526 | + log.Printf("Starting server on %s:%d (base-url: \"%s\", assets-path: \"%s\")\n", |
| 527 | + a.Config.Server.Host, |
| 528 | + a.Config.Server.Port, |
| 529 | + a.Config.Server.BaseURL, |
| 530 | + absAssetsPath, |
| 531 | + ) |
| 532 | + } |
| 533 | + |
| 534 | + if err := server.Serve(listener); err != nil && err != http.ErrServerClosed { |
505 | 535 | return err |
506 | 536 | } |
507 | 537 |
|
|
0 commit comments