1 import Base 2 import ./Protocol.bend as Protocol 3 4 # Carries the state for ReadDisposition. 5 type ReadDisposition is Data: 6 ReadInterrupted{} 7 ReadWouldBlock{} 8 ReadFailure{} 9 10 # Carries the state for WriteDisposition. 11 type WriteDisposition is Data: 12 WriteInterrupted{} 13 WriteWouldBlock{} 14 WriteFailure{} 15 16 def read.disposition(code: U32) -> ReadDisposition: 17 match code: 18 case 4: ReadInterrupted{} 19 case 11: ReadWouldBlock{} 20 case 35: ReadWouldBlock{} 21 case _: ReadFailure{} 22 23 def write.disposition(code: U32) -> WriteDisposition: 24 match code: 25 case 4: WriteInterrupted{} 26 case 11: WriteWouldBlock{} 27 case 35: WriteWouldBlock{} 28 case _: WriteFailure{} 29 def write_chunk.copied(copies: U32 & U32 & U32) -> U32: 30 match copies: 31 case (checked, (retained, _)): 32 Bool.pick(U32, U32.is_le(checked, 65536), retained, 65536) 33 34 # Caps one socket write request while preserving the remaining byte count. 35 def write_chunk(remaining: U32) -> U32: 36 write_chunk.copied(Protocol.u32.duplicate.triple(remaining))