This is a light-weight, user-space implementation of RFC 793 (TCP), without any reliance on an IP layer. It can be used to provide multiple in-order, reliable streams on top of any datagram layer. UTCP does not rely on a specific event system. Instead, the application feeds it with incoming packets using utcp_recv(), and outgoing data for the streams using utcp_send(). Most of the rest is handled by callbacks. The application must however call utcp_timeout() regularly to have UTCP handle packet loss. The application should run utcp_init() for every peer it wants to communicate with. DIFFERENCES FROM RFC 793: * No checksum. UTCP requires the application to handle packet integrity. * 32-bit window size. Big window sizes are the default. * No ECN, PSH, URG TODO v1.0: * Implement send buffer * Window scaling * Handle retransmission TODO v2.0: * Nagle * NAK and SACK * Congestion window scaling * Timestamps? Future ideas: Fast open: SYN + data? Receive-only open: SYN|FIN Fast transaction: SYN|FIN + request data -> <- SYN|ACK|FIN + response data ACK -> Does this need special care or can we rely on higher level MACs?