diff --git a/src/Network/sockets/knSocketTCP.c b/src/Network/sockets/knSocketTCP.c index 42b079e..fa404fd 100644 --- a/src/Network/sockets/knSocketTCP.c +++ b/src/Network/sockets/knSocketTCP.c @@ -100,3 +100,15 @@ Maybe knSocketTCP_receive(knSocketTCP* socket, char* buffer, u32 bufferLength){ return SUCCESS(UniUInt64(receivedCount)); } + +Maybe knSocketTCP_receiveN(knSocketTCP* socket, char* buf, u32 bufsize, u32 n){ + if(bufsize < n) + safethrow(ERR_UNEXPECTEDVAL, ;); + + u32 receivedTotal = 0; + while(receivedTotal < n) { + try(knSocketTCP_receive(socket, buf+receivedTotal, n-receivedTotal), m_receivedCount, ;); + receivedTotal += m_receivedCount.value.UInt64; + } + return MaybeNull; +} diff --git a/src/Network/sockets/knSocketTCP.h b/src/Network/sockets/knSocketTCP.h index 6cc4072..b25f443 100644 --- a/src/Network/sockets/knSocketTCP.h +++ b/src/Network/sockets/knSocketTCP.h @@ -51,6 +51,10 @@ Maybe knSocketTCP_send(knSocketTCP* socket, char* buffer, u32 dataLength); ///@return Maybe received bytes amount Maybe knSocketTCP_receive(knSocketTCP* socket, char* buffer, u32 bufferLength); +/// receives a package of size n +///@return Maybe +Maybe knSocketTCP_receiveN(knSocketTCP* socket, char* buf, u32 bufsize, u32 n); + #if __cplusplus } #endif \ No newline at end of file