openai/codex · error · std::io::Error

socket closed while receiving frame payload

Error message

socket closed while receiving frame payload

What it means

Error "socket closed while receiving frame payload" thrown in openai/codex.

Source

Thrown at codex-rs/shell-escalation/src/unix/socket.rs:165

/// Read `message_len` bytes from a SOCK_STREAM socket.
async fn read_frame_payload(
    async_socket: &AsyncFd<Socket>,
    message_len: usize,
) -> std::io::Result<Vec<u8>> {
    if message_len == 0 {
        return Ok(Vec::new());
    }
    let mut payload = vec![MaybeUninit::<u8>::uninit(); message_len];
    let mut filled = 0;
    while filled < message_len {
        let mut guard = async_socket.readable().await?;
        let read = match guard.try_io(|inner| inner.get_ref().recv(&mut payload[filled..])) {
            Ok(Ok(read)) => read,
            Ok(Err(err)) => return Err(err),
            Err(_would_block) => continue,
        };
        if read == 0 {
            return Err(std::io::Error::new(
                std::io::ErrorKind::UnexpectedEof,
                "socket closed while receiving frame payload",
            ));
        }
        filled += read;
        assert!(filled <= message_len);
        if filled == message_len {
            return Ok(assume_init_vec(payload));
        }
    }
    unreachable!("loop exits only after returning payload")
}

fn send_datagram_bytes(socket: &Socket, data: &[u8], fds: &[OwnedFd]) -> std::io::Result<()> {
    let control = make_control_message(fds)?;
    let payload = [IoSlice::new(data)];
    let msg = if control.is_empty() {
        MsgHdr::new().with_buffers(&payload)

View on GitHub (pinned to 339751715c)

When it happens

Trigger: Thrown at codex-rs/shell-escalation/src/unix/socket.rs:165 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of openai/codex@339751715c (2026-08-25). Data as JSON: /api/errors/ec36e059652b0b6b. Report an issue: GitHub.