Stop gracefully shuts down the API server without interrupting any active connections. Parameters: - ctx: The context for graceful shutdown Returns: - error: An error if the server fails to stop
(ctx context.Context)
| 1538 | // Returns: |
| 1539 | // - error: An error if the server fails to stop |
| 1540 | func (s *Server) Stop(ctx context.Context) error { |
| 1541 | log.Debug("Stopping API server...") |
| 1542 | |
| 1543 | if s.keepAliveEnabled { |
| 1544 | select { |
| 1545 | case s.keepAliveStop <- struct{}{}: |
| 1546 | default: |
| 1547 | } |
| 1548 | } |
| 1549 | |
| 1550 | if s.muxHTTPListener != nil { |
| 1551 | _ = s.muxHTTPListener.Close() |
| 1552 | } |
| 1553 | if s.muxBaseListener != nil { |
| 1554 | if errClose := s.muxBaseListener.Close(); errClose != nil && !errors.Is(errClose, net.ErrClosed) { |
| 1555 | log.Debugf("failed to close shared listener: %v", errClose) |
| 1556 | } |
| 1557 | } |
| 1558 | |
| 1559 | // Shutdown the HTTP server. |
| 1560 | if err := s.server.Shutdown(ctx); err != nil { |
| 1561 | return fmt.Errorf("failed to shutdown HTTP server: %v", err) |
| 1562 | } |
| 1563 | |
| 1564 | log.Debug("API server stopped") |
| 1565 | return nil |
| 1566 | } |
| 1567 | |
| 1568 | // corsMiddleware returns a Gin middleware handler that adds CORS headers |
| 1569 | // to every response, allowing cross-origin requests. |