net/smtp: in smtp.go, c.cmd(501, "*") takes long for server to respond.
#18,094 opened on Nov 29, 2016
Repository metrics
- Stars
- (133,883 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
What version of Go are you using (go version)?
go version go1.7.3 linux/amd64
What operating system and processor architecture are you using (go env)?
GOARCH="amd64" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build126580691=/tmp/go-build -gno-record-gcc-switches" CXX="g++" CGO_ENABLED="1"
What did you do?
I tried to establish a tls connection to an smtp server and call client.Auth to authenticate, code may look like this:
conn, _ := tls.Dial("tcp", host+":"+port, nil)
client, _ := smtp.NewClient(conn, host)
err := client.Auth(smtp.PlainAuth("", user, password, host))
What did you see instead?
When the incorrect username/password is provided the function Auth took 1 minute to return. I found it was due to this line:
https://github.com/golang/go/blob/master/src/net/smtp/smtp.go#L221
that the client tries to send "*" to server and expects "501" which is "Syntax Error", it took very long for server to respond. If I comment this line and rebuild. I can get the error very quickly.
Could anyone let me know why is this line necessary? And is it common the server took 1 minute to respond "*"?