@@ -2,6 +2,7 @@ package main // import "github.com/sourcegraph/go-langserver"
22
33import (
44 "context"
5+ "crypto/tls"
56 "flag"
67 "fmt"
78 "io"
@@ -123,6 +124,24 @@ func run(cfg langserver.Config) error {
123124 go buildserver .FetchCommonDeps ()
124125 }
125126
127+ listen := func (addr string ) (* net.Listener , error ) {
128+ listener , err := net .Listen ("tcp" , addr )
129+ if err != nil {
130+ log .Fatalf ("Could not bind to address %s: %v" , addr , err )
131+ return nil , err
132+ }
133+ if os .Getenv ("TLS_CERT" ) != "" && os .Getenv ("TLS_KEY" ) != "" {
134+ cert , err := tls .X509KeyPair ([]byte (os .Getenv ("TLS_CERT" )), []byte (os .Getenv ("TLS_KEY" )))
135+ if err != nil {
136+ return nil , err
137+ }
138+ listener = tls .NewListener (listener , & tls.Config {
139+ Certificates : []tls.Certificate {cert },
140+ })
141+ }
142+ return & listener , nil
143+ }
144+
126145 if * printVersion {
127146 fmt .Println (version )
128147 return nil
@@ -155,18 +174,18 @@ func run(cfg langserver.Config) error {
155174
156175 switch * mode {
157176 case "tcp" :
158- lis , err := net . Listen ( "tcp" , * addr )
177+ lis , err := listen ( * addr )
159178 if err != nil {
160179 return err
161180 }
162- defer lis .Close ()
181+ defer ( * lis ) .Close ()
163182
164183 log .Println ("langserver-go: listening for TCP connections on" , * addr )
165184
166185 connectionCount := 0
167186
168187 for {
169- conn , err := lis .Accept ()
188+ conn , err := ( * lis ) .Accept ()
170189 if err != nil {
171190 return err
172191 }
@@ -206,8 +225,18 @@ func run(cfg langserver.Config) error {
206225 openGauge .Dec ()
207226 })
208227
228+ l , err := listen (* addr )
229+ if err != nil {
230+ log .Println (err )
231+ return err
232+ }
233+ server := & http.Server {
234+ Handler : mux ,
235+ ReadTimeout : 75 * time .Second ,
236+ WriteTimeout : 60 * time .Second ,
237+ }
209238 log .Println ("langserver-go: listening for WebSocket connections on" , * addr )
210- err := http . ListenAndServe ( * addr , mux )
239+ err = server . Serve ( * l )
211240 log .Println (errors .Wrap (err , "HTTP server" ))
212241 return err
213242
0 commit comments