{"record":{"id":"ec36e059652b0b6b","repo":"openai/codex","slug":"socket-closed-while-receiving-frame-payload","errorCode":null,"errorMessage":"socket closed while receiving frame payload","messagePattern":"socket closed while receiving frame payload","errorType":"exception","errorClass":"std::io::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/shell-escalation/src/unix/socket.rs","lineNumber":165,"sourceCode":"/// Read `message_len` bytes from a SOCK_STREAM socket.\nasync fn read_frame_payload(\n    async_socket: &AsyncFd<Socket>,\n    message_len: usize,\n) -> std::io::Result<Vec<u8>> {\n    if message_len == 0 {\n        return Ok(Vec::new());\n    }\n    let mut payload = vec![MaybeUninit::<u8>::uninit(); message_len];\n    let mut filled = 0;\n    while filled < message_len {\n        let mut guard = async_socket.readable().await?;\n        let read = match guard.try_io(|inner| inner.get_ref().recv(&mut payload[filled..])) {\n            Ok(Ok(read)) => read,\n            Ok(Err(err)) => return Err(err),\n            Err(_would_block) => continue,\n        };\n        if read == 0 {\n            return Err(std::io::Error::new(\n                std::io::ErrorKind::UnexpectedEof,\n                \"socket closed while receiving frame payload\",\n            ));\n        }\n        filled += read;\n        assert!(filled <= message_len);\n        if filled == message_len {\n            return Ok(assume_init_vec(payload));\n        }\n    }\n    unreachable!(\"loop exits only after returning payload\")\n}\n\nfn send_datagram_bytes(socket: &Socket, data: &[u8], fds: &[OwnedFd]) -> std::io::Result<()> {\n    let control = make_control_message(fds)?;\n    let payload = [IoSlice::new(data)];\n    let msg = if control.is_empty() {\n        MsgHdr::new().with_buffers(&payload)","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/shell-escalation/src/unix/socket.rs#L147-L183","documentation":"Error \"socket closed while receiving frame payload\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/shell-escalation/src/unix/socket.rs:165 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}