From 1fc18f910500e24a1016d90abf958ac3cd9c7b7b Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 21 Oct 2019 19:05:06 +0100 Subject: [PATCH] Add buffer to socket receive. --- unix/network.c | 19 ++++++++++++++++++- wii/network.c | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/unix/network.c b/unix/network.c index a699820..59df060 100644 --- a/unix/network.c +++ b/unix/network.c @@ -57,6 +57,23 @@ int32_t NetSocket(uint32_t domain, uint32_t type, uint32_t protocol) { return so int32_t NetBind(int32_t sockfd, struct sockaddr* addr, socklen_t addrlen) { return bind(sockfd, addr, addrlen); } int32_t NetListen(int32_t sockfd, uint32_t backlog) { return listen(sockfd, backlog); } int32_t NetAccept(int32_t sockfd, struct sockaddr* addr, socklen_t* addrlen) { return accept(sockfd, addr, addrlen); } -int32_t NetRecv(int32_t sockfd, void* buf, int32_t len, uint32_t flags) { return recv(sockfd, buf, len, flags); } +int32_t NetRecv(int32_t sockfd, void* buf, int32_t len, uint32_t flags) +{ + int32_t got_once; + int32_t got_total = 0; + + while(len > 0) + { + got_once = recv(sockfd, buf, len, flags); + + if(got_once <= 0) break; + + buf += got_once; + got_total += got_once; + len -= got_once; + } + + return got_total; +} int32_t NetWrite(int32_t fd, const void* buf, int32_t size) { return write(fd, buf, size); } int32_t NetClose(int32_t fd) { return close(fd); } diff --git a/wii/network.c b/wii/network.c index 768ebd7..3e3ba42 100644 --- a/wii/network.c +++ b/wii/network.c @@ -45,6 +45,23 @@ int32_t NetAccept(int32_t sockfd, struct sockaddr* addr, socklen_t* addrlen) { return net_accept(sockfd, addr, addrlen); } -int32_t NetRecv(int32_t sockfd, void* buf, int32_t len, uint32_t flags) { return net_recv(sockfd, buf, len, flags); } +int32_t NetRecv(int32_t sockfd, void* buf, int32_t len, uint32_t flags) +{ + int32_t got_once; + int32_t got_total = 0; + + while(len > 0) + { + got_once = net_recv(sockfd, buf, len, flags); + + if(got_once <= 0) break; + + buf += got_once; + got_total += got_once; + len -= got_once; + } + + return got_total; +} int32_t NetWrite(int32_t fd, const void* buf, int32_t size) { return net_write(fd, buf, size); } int32_t NetClose(int32_t fd) { return net_close(fd); }