in internal/langserver/langserver.go [114:147]
func (ls *langServer) StartTCP(address string) error {
ls.logger.Printf("Starting TCP server (pid %d; concurrency: %d) at %q ...",
os.Getpid(), ls.srvOptions.Concurrency, address)
lst, err := net.Listen("tcp", address)
if err != nil {
return fmt.Errorf("TCP Server failed to start: %s", err)
}
ls.logger.Printf("TCP server running at %q", lst.Addr())
accepter := server.NetAccepter(lst, channel.LSP)
go func() {
ls.logger.Println("Starting loop server ...")
err = server.Loop(accepter, ls.newService, &server.LoopOptions{
ServerOptions: ls.srvOptions,
})
if err != nil {
ls.logger.Printf("Loop server failed to start: %s", err)
}
}()
select { //nolint
case <-ls.srvCtx.Done():
ls.logger.Printf("Stopping TCP server (pid %d) ...", os.Getpid())
err = lst.Close()
if err != nil {
ls.logger.Printf("TCP server (pid %d) failed to stop: %s", os.Getpid(), err)
return err
}
}
ls.logger.Printf("TCP server (pid %d) stopped.", os.Getpid())
return nil
}