package main import ( "bufio" "log/slog" "net" "time" "github.com/pkg/profile" "tilok.dev/go-http-server/config" rh "tilok.dev/go-http-server/response_helper" ) func main() { conf := config.GetConfig() if conf.Profile { defer profile.Start().Stop() } listener, err := net.Listen("tcp", conf.NetInterface) if err != nil { slog.Error("Could not create listener", "err", err.Error()) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { slog.Error("Could not accept connection", "err", err.Error()) continue } go handleConnection(conn) } } func handleConnection(conn net.Conn) { startTime := time.Now() defer func() { slog.Info("Request handled", "duration", time.Since(startTime).String()) }() defer conn.Close() reader := bufio.NewReader(conn) headers := readHeaders(reader) if headers == nil { rh.RespondWithStatusCode(400, conn) return } slog.Info("Received request", "method", headers.Method, "uri", headers.Uri, "proto", headers.Proto, "client", conn.RemoteAddr().String()) HandleHTTPRequest(*headers, conn) }