hi, the parameter validation for the optional "start" and "end" arguments to "recvfrom!" are off by one if "end" is passed. From libguile/socket.c (master commit 64c89458e6): ... if (SCM_UNBNDP (end)) cend = SCM_BYTEVECTOR_LENGTH (buf); else { cend = scm_to_size_t (end); if (SCM_UNLIKELY (cend >= SCM_BYTEVECTOR_LENGTH (buf) || cend < offset)) scm_out_of_range (FUNC_NAME, end); } ... "end" is the optional end argument, "offset" is 0 or "start" if start was given. The check must be: cend > SCM_BYTEVECTOR_LENGTH (buf) || cend <= offset to allow filling the last byte in the buffer and verify that start is not equal to end. A workaround to skip the validation is to not pass end. But i think a better way would be to always validate start (and end), if one (or both) of them are passed. A potentional fix is attached. If you need any additional information, please let me know. Thank you for your great work! - d4ryus