Files
http-server/main.go
2026-02-15 18:49:22 +01:00

57 lines
1.1 KiB
Go

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)
}