/*
GoCheese -- Python private package repository and caching proxy
Copyright (C) 2019 Sergey Matveev <stargrave@stargrave.org>
+ 2019 Elena Balakhonova <balakhonova_e@riseup.net>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
"io"
"io/ioutil"
"log"
+ "net"
"net/http"
"net/url"
"os"
"strings"
"syscall"
"time"
+
+ "golang.org/x/net/netutil"
)
const (
passwdPath = flag.String("passwd", "passwd", "Path to file with authenticators")
passwdCheck = flag.Bool("passwd-check", false, "Test the -passwd file for syntax errors and exit")
fsck = flag.Bool("fsck", false, "Check integrity of all packages")
+ maxClients = flag.Int("maxclients", 128, "Maximal amount of simultaneous clients")
version = flag.Bool("version", false, "Print version information")
warranty = flag.Bool("warranty", false, "Print warranty information")
killed := make(chan error, 0)
http.HandleFunc(*norefreshURLPath, handler)
http.HandleFunc(*refreshURLPath, handler)
+ ln, err := net.Listen("tcp", *bind)
+ if err != nil {
+ log.Fatal(err)
+ }
s := &http.Server{
- Addr: *bind,
- ReadTimeout: time.Minute,
- WriteTimeout: time.Minute,
+ ReadTimeout: time.Minute,
+ WriteTimeout: time.Minute,
}
signal.Notify(needsRefreshPasswd, syscall.SIGHUP)
signal.Notify(needsShutdown, syscall.SIGTERM, syscall.SIGINT)
killed <- s.Shutdown(ctx)
cancel()
}(s)
- if err := s.ListenAndServe(); err != http.ErrServerClosed {
+ if err := s.Serve(netutil.LimitListener(ln, *maxClients)); err != http.ErrServerClosed {
log.Fatal(err)
}
if err := <-killed; err != nil {