more context for EOF during client setup
diff --git a/client.go b/client.go
index 9e0b616..6911b6a 100644
--- a/client.go
+++ b/client.go
@@ -4,6 +4,7 @@
"bytes"
"encoding/binary"
"errors"
+ "fmt"
"io"
"math"
"os"
@@ -226,15 +227,22 @@
if err := sftp.sendInit(); err != nil {
wr.Close()
- return nil, err
+ return nil, fmt.Errorf("error sending init packet to server: %w", err)
}
+
if err := sftp.recvVersion(); err != nil {
wr.Close()
- return nil, err
+ return nil, fmt.Errorf("error receiving version packet from server: %w", err)
}
sftp.clientConn.wg.Add(1)
- go sftp.loop()
+ go func() {
+ defer sftp.clientConn.wg.Done()
+
+ if err := sftp.clientConn.recv(); err != nil {
+ sftp.clientConn.broadcastErr(err)
+ }
+ }()
return sftp, nil
}
@@ -267,8 +275,13 @@
func (c *Client) recvVersion() error {
typ, data, err := c.recvPacket(0)
if err != nil {
+ if err == io.EOF {
+ return io.ErrUnexpectedEOF
+ }
+
return err
}
+
if typ != sshFxpVersion {
return &unexpectedPacketErr{sshFxpVersion, typ}
}
@@ -277,6 +290,7 @@
if err != nil {
return err
}
+
if version != sftpProtocolVersion {
return &unexpectedVersionErr{sftpProtocolVersion, version}
}
diff --git a/conn.go b/conn.go
index 7d95142..1ce9725 100644
--- a/conn.go
+++ b/conn.go
@@ -61,14 +61,6 @@
return c.conn.Close()
}
-func (c *clientConn) loop() {
- defer c.wg.Done()
- err := c.recv()
- if err != nil {
- c.broadcastErr(err)
- }
-}
-
// recv continuously reads from the server and forwards responses to the
// appropriate channel.
func (c *clientConn) recv() error {