                 let frame = try parser.acceptMessage()
                 try received(frame)
             } catch {
-                // TODO: If connection is closed by peer here w/ error, we have an issue
-                // where `onClose` won't be called,
-                // I'm unable to create this scenario, so it might be a non-issue
-                //
                 Log.error("WebSocket Failed w/ error: \(error)")
-                break
+                try completeCloseHandshake(cleanly: false)
             }
         }
     }

        try send(Data(data))
    }
}
extension WebSock.Message {
    /* https://tools.ietf.org/html/rfc6455#section-5.2
     0               1               2               3
     0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7


 Right now it's dependent on response, it should timeout and close _not cleanly_
 */

extension WebSock {
    public func send(_ msg: Message) throws {
