diff --git a/close_notjs.go b/close_notjs.go
index 08a1ea05aedd993a65066ceb51a599ca3a254c50..160a1237ff98e7c0214d9bd570e883cb37c329be 100644
--- a/close_notjs.go
+++ b/close_notjs.go
@@ -35,7 +35,7 @@ func (c *Conn) closeHandshake(code StatusCode, reason string) (err error) {
 	defer errd.Wrap(&err, "failed to close WebSocket")
 
 	err = c.writeClose(code, reason)
-	if CloseStatus(err) == -1 {
+	if err != nil && CloseStatus(err) == -1 {
 		return err
 	}
 
@@ -63,16 +63,19 @@ func (c *Conn) writeClose(code StatusCode, reason string) error {
 	c.setCloseErr(xerrors.Errorf("sent close frame: %w", ce))
 
 	var p []byte
+	var err error
 	if ce.Code != StatusNoStatusRcvd {
-		var err error
 		p, err = ce.bytes()
 		if err != nil {
 			log.Printf("websocket: %v", err)
-			return err
 		}
 	}
 
-	return c.writeControl(context.Background(), opClose, p)
+	werr := c.writeControl(context.Background(), opClose, p)
+	if err != nil {
+		return err
+	}
+	return werr
 }
 
 func (c *Conn) waitCloseHandshake() error {