From 5708ab26c0de8fc1be3e96a0f3f092da0938169e Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 20 Nov 2020 15:58:32 +0100 Subject: Fixed some network race conditions --- libnet/inc/net.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'libnet/inc/net.h') diff --git a/libnet/inc/net.h b/libnet/inc/net.h index 6ff9619..ac9296e 100644 --- a/libnet/inc/net.h +++ b/libnet/inc/net.h @@ -28,14 +28,21 @@ ((((a)&0xff) << 24) | (((b)&0xff) << 16) | (((c)&0xff) << 8) | (((d)&0xff) << 0)) #define net_open(type) (void *)sys1(SYS_NET_OPEN, (int)(type)) -#define net_close(socket) (void)sys1(SYS_NET_CLOSE, (int)(socket)) #define net_connect(socket, ip_addr, dst_port) \ (int)sys3(SYS_NET_CONNECT, (int)(socket), (int)(ip_addr), (int)(dst_port)) #define net_send(socket, data, len) (void)sys3(SYS_NET_SEND, (int)(socket), (int)(data), (int)(len)) +#include +static inline int net_close(struct socket *socket) +{ + int res = 0; + while (!(res = (int)sys1(SYS_NET_CLOSE, (int)(socket)))) + ; + return res; +} static inline int net_receive(struct socket *socket, void *buf, u32 len) { int res = 0; - while ((res = (int)sys3(SYS_NET_RECEIVE, (int)(socket), (int)(buf), (int)(len))) == 0) + while (!(res = (int)sys3(SYS_NET_RECEIVE, (int)(socket), (int)(buf), (int)(len)))) ; return res; } -- cgit v1.2.3