mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Handle generated errors in client
This commit is contained in:
parent
78a37844b2
commit
b26c7a7a73
3 changed files with 28 additions and 14 deletions
|
@ -45,7 +45,7 @@ func ConnectLoop(snowflakes sf.SnowflakeCollector) {
|
|||
}
|
||||
|
||||
// Accept local SOCKS connections and pass them to the handler.
|
||||
func socksAcceptLoop(ln *pt.SocksListener, snowflakes sf.SnowflakeCollector) error {
|
||||
func socksAcceptLoop(ln *pt.SocksListener, snowflakes sf.SnowflakeCollector) {
|
||||
defer ln.Close()
|
||||
log.Println("Started SOCKS listener.")
|
||||
for {
|
||||
|
@ -55,7 +55,8 @@ func socksAcceptLoop(ln *pt.SocksListener, snowflakes sf.SnowflakeCollector) err
|
|||
if e, ok := err.(net.Error); ok && e.Temporary() {
|
||||
continue
|
||||
}
|
||||
return err
|
||||
log.Printf("SOCKS accept error: %s", err)
|
||||
break
|
||||
}
|
||||
log.Println("SOCKS accepted: ", conn.Req)
|
||||
err = sf.Handler(conn, snowflakes)
|
||||
|
@ -155,7 +156,9 @@ func main() {
|
|||
log.Fatal(err)
|
||||
}
|
||||
if ptInfo.ProxyURL != nil {
|
||||
pt.ProxyError("proxy is not supported")
|
||||
if err := pt.ProxyError("proxy is not supported"); err != nil {
|
||||
log.Printf("call to pt.ProxyError generated error: %v", err)
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
listeners := make([]net.Listener, 0)
|
||||
|
@ -165,14 +168,18 @@ func main() {
|
|||
// TODO: Be able to recover when SOCKS dies.
|
||||
ln, err := pt.ListenSocks("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
pt.CmethodError(methodName, err.Error())
|
||||
if inerr := pt.CmethodError(methodName, err.Error()); inerr != nil {
|
||||
log.Printf("handling error generated by pt.ListenSocks with pt.CmethodError generated error: %v", inerr)
|
||||
}
|
||||
break
|
||||
}
|
||||
go socksAcceptLoop(ln, snowflakes)
|
||||
pt.Cmethod(methodName, ln.Version(), ln.Addr())
|
||||
listeners = append(listeners, ln)
|
||||
default:
|
||||
pt.CmethodError(methodName, "no such method")
|
||||
if err := pt.CmethodError(methodName, "no such method"); err != nil {
|
||||
log.Printf("calling pt.CmethodError generated error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
pt.CmethodsDone()
|
||||
|
@ -186,7 +193,9 @@ func main() {
|
|||
// This environment variable means we should treat EOF on stdin
|
||||
// just like SIGTERM: https://bugs.torproject.org/15435.
|
||||
go func() {
|
||||
io.Copy(ioutil.Discard, os.Stdin)
|
||||
if _, err := io.Copy(ioutil.Discard, os.Stdin); err != nil {
|
||||
log.Printf("calling io.Copy(ioutil.Discard, os.Stdin) returned error: %v", err)
|
||||
}
|
||||
log.Printf("synthesizing SIGTERM because of stdin close")
|
||||
sigChan <- syscall.SIGTERM
|
||||
}()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue