请将下方_recv函数的文字描述转换成伪代码，并添加适当的注释。该函数用于接收通过套接字araoh接收的数据，首先检查接收到的数据长度是否为期望的长度，如果不是期望长度，则记录错误信息并断开连接。如果数据长度符合要求，就计算接收到的数据的CRC32检验值，然后与期望的CRC32值比较，如果不匹配，则记录错误信息并断开连接。如果CRC32校验通过，就将数据保存至指定的文件中。

函数签名：function recv coatingsFile希望通过此函数接收到的数据长度是length，期望的CRC32校验值是expected_crc32。眼部接收到的数据是通过用套接字sock接收的。将接收到的数据添加到文件file中。 使用第一人称描述函数执行过程。
user
function recv(sock, file, length, expected_crc32) {
    // 从套接字接收数据
    var data = sock.recv(length);
    // 检查接收到的数据长度是否和期望长度一致
    if (data.length != length) {
        // 如果长度不匹配，记录错误信息并断开连接
        console.log("Error: 数据长度不匹配。");
        sock.close();
        return;
    }
    // 计算接收到的数据的CRC32校验值
    var crc32 = calculateCRC32(data);
    // 比较计算出的CRC32值与期望的CRC32值
    if (crc32 != expected_crc32) {
        // 如果CRC32不匹配，记录错误信息并断开连接
        console.log("Error: CRC32校验失败。");
        sock.close();
        return;
    }
    // CRC32校验通过，将数据保存至指定的文件
    file.write(data);
}
assistant