11package httpserver
22
33import (
4- "errors"
54 "net"
65 "net/http"
7- "os"
8- "runtime"
9- "strconv"
10- "syscall"
116
12- "github.com/projectdiscovery/gologger"
137 "github.com/projectdiscovery/simplehttpserver/pkg/sslcert"
148)
159
@@ -46,26 +40,10 @@ func New(options *Options) (*HTTPServer, error) {
4640}
4741
4842func (t * HTTPServer ) ListenAndServe () error {
49- var err error
50- retry_listen:
51- gologger .Print ().Msgf ("Serving %s on http://%s/..." , t .options .Folder , t .options .ListenAddress )
52- err = http .ListenAndServe (t .options .ListenAddress , t .layers )
53- if err != nil {
54- if isErrorAddressAlreadyInUse (err ) {
55- gologger .Print ().Msgf ("Can't listen on %s: %s - retrying with another port\n " , t .options .ListenAddress , err )
56- newListenAddress , err := incPort (t .options .ListenAddress )
57- if err != nil {
58- return err
59- }
60- t .options .ListenAddress = newListenAddress
61- goto retry_listen
62- }
63- }
64- return nil
43+ return http .ListenAndServe (t .options .ListenAddress , t .layers )
6544}
6645
6746func (t * HTTPServer ) ListenAndServeTLS () error {
68- gologger .Print ().Msgf ("Serving %s on https://%s/..." , t .options .Folder , t .options .ListenAddress )
6947 if t .options .Certificate == "" || t .options .CertificateKey == "" {
7048 tlsOptions := sslcert .DefaultOptions
7149 tlsOptions .Host = t .options .CertificateDomain
@@ -83,38 +61,6 @@ func (t *HTTPServer) ListenAndServeTLS() error {
8361 return http .ListenAndServeTLS (t .options .ListenAddress , t .options .Certificate , t .options .CertificateKey , t .layers )
8462}
8563
86- func isErrorAddressAlreadyInUse (err error ) bool {
87- var eOsSyscall * os.SyscallError
88- if ! errors .As (err , & eOsSyscall ) {
89- return false
90- }
91- var errErrno syscall.Errno // doesn't need a "*" (ptr) because it's already a ptr (uintptr)
92- if ! errors .As (eOsSyscall , & errErrno ) {
93- return false
94- }
95- if errErrno == syscall .EADDRINUSE {
96- return true
97- }
98- const WSAEADDRINUSE = 10048
99- if runtime .GOOS == "windows" && errErrno == WSAEADDRINUSE {
100- return true
101- }
102- return false
103- }
104-
105- func incPort (address string ) (string , error ) {
106- addrOrig , portOrig , err := net .SplitHostPort (address )
107- if err != nil {
108- return address , err
109- }
110-
111- // increment port
112- portNumber , err := strconv .Atoi (portOrig )
113- if err != nil {
114- return address , err
115- }
116- portNumber ++
117- newPort := strconv .FormatInt (int64 (portNumber ), 10 )
118-
119- return net .JoinHostPort (addrOrig , newPort ), nil
64+ func (t * HTTPServer ) Close () error {
65+ return nil
12066}
0 commit comments