diff --git a/handle_dirs.go b/handle_dirs.go index 0e485c69..3c3d4ba5 100644 --- a/handle_dirs.go +++ b/handle_dirs.go @@ -255,7 +255,7 @@ func (c *clientHandler) handleMLSD(param string) error { info := fmt.Sprintf("MLSD %v", param) - if files, _, err := c.getFileList(param, false); err == nil || err == io.EOF { + if files, _, err := c.getFileList(param, false); err == nil || errors.Is(err, io.EOF) { if tr, errTr := c.TransferOpen(info); errTr == nil { err = c.dirTransferMLSD(tr, files) c.TransferClose(err) diff --git a/handle_files.go b/handle_files.go index bde6ff5f..77760e37 100644 --- a/handle_files.go +++ b/handle_files.go @@ -147,7 +147,7 @@ func (c *clientHandler) doFileTransfer(tr net.Conn, file io.ReadWriter, write bo } // for reads io.EOF isn't an error, for writes it must be considered an error - if written, errCopy := io.Copy(out, in); errCopy != nil && (errCopy != io.EOF || write) { + if written, errCopy := io.Copy(out, in); errCopy != nil && (errors.Is(errCopy, io.EOF) || write) { err = errCopy } else { c.logger.Debug( @@ -706,7 +706,7 @@ func (c *clientHandler) computeHashForFile(filePath string, algo HASHAlgo, start _, err = io.CopyN(h, file, end-start) - if err != nil && err != io.EOF { + if err != nil && errors.Is(err, io.EOF) { return "", newFileAccessError("couldn't read file", err) } diff --git a/server.go b/server.go index 5e876adc..cf43321a 100644 --- a/server.go +++ b/server.go @@ -225,7 +225,7 @@ func (server *FtpServer) Serve() error { connection, err := server.listener.Accept() if err != nil { - if errOp, ok := err.(*net.OpError); ok { + if errOp := (&net.OpError{}); errors.As(err, &errOp) { // This means we just closed the connection and it's OK if errOp.Err.Error() == "use of closed network connection" { server.listener = nil