diff --git a/sc2/src/libs/network/socket/socket.h b/sc2/src/libs/network/socket/socket.h index 707d3191a..e74a8f142 100644 --- a/sc2/src/libs/network/socket/socket.h +++ b/sc2/src/libs/network/socket/socket.h @@ -80,7 +80,11 @@ int Socket_bind(Socket *sock, const struct sockaddr *addr, int Socket_listen(Socket *sock, int backlog); Socket *Socket_accept(Socket *sock, struct sockaddr *addr, socklen_t *addrLen); ssize_t Socket_send(Socket *sock, const void *buf, size_t len, int flags); +ssize_t Socket_sendto(Socket *sock, const void *buf, size_t len, int flags, + const struct sockaddr *addr, socklen_t addrLen); ssize_t Socket_recv(Socket *sock, void *buf, size_t len, int flags); +ssize_t Socket_recvfrom(Socket *sock, void *buf, size_t len, int flags, + struct sockaddr *from, socklen_t *fromLen); int Socket_setNonBlocking(Socket *sock); int Socket_setReuseAddr(Socket *sock); diff --git a/sc2/src/libs/network/socket/socket_bsd.c b/sc2/src/libs/network/socket/socket_bsd.c index 54d5d58ba..2bf25b83e 100644 --- a/sc2/src/libs/network/socket/socket_bsd.c +++ b/sc2/src/libs/network/socket/socket_bsd.c @@ -129,11 +129,23 @@ Socket_send(Socket *sock, const void *buf, size_t len, int flags) { return send(sock->fd, buf, len, flags); } +ssize_t +Socket_sendto(Socket *sock, const void *buf, size_t len, int flags, + const struct sockaddr *addr, socklen_t addrLen) { + return sendto(sock->fd, buf, len, flags, addr, addrLen); +} + ssize_t Socket_recv(Socket *sock, void *buf, size_t len, int flags) { return recv(sock->fd, buf, len, flags); } +ssize_t +Socket_recvfrom(Socket *sock, void *buf, size_t len, int flags, + struct sockaddr *from, socklen_t *fromLen) { + return recvfrom(sock->fd, buf, len, flags, from, fromLen); +} + int Socket_setNonBlocking(Socket *sock) { int flags; diff --git a/sc2/src/libs/network/socket/socket_win.c b/sc2/src/libs/network/socket/socket_win.c index 7c8ee3b2d..e1ed002f8 100644 --- a/sc2/src/libs/network/socket/socket_win.c +++ b/sc2/src/libs/network/socket/socket_win.c @@ -159,6 +159,20 @@ Socket_send(Socket *sock, const void *buf, size_t len, int flags) { return sendResult; } +ssize_t +Socket_sendto(Socket *sock, const void *buf, size_t len, int flags, + const struct sockaddr *addr, socklen_t addrLen) { + int sendResult; + + sendResult = sendto(sock->sock, buf, len, flags, addr, addrLen); + if (sendResult == SOCKET_ERROR) { + errno = getWinsockErrno(); + return -1; + } + + return sendResult; +} + ssize_t Socket_recv(Socket *sock, void *buf, size_t len, int flags) { int recvResult; @@ -172,6 +186,20 @@ Socket_recv(Socket *sock, void *buf, size_t len, int flags) { return recvResult; } +ssize_t +Socket_recvfrom(Socket *sock, void *buf, size_t len, int flags, + struct sockaddr *from, socklen_t *fromLen) { + int recvResult; + + recvResult = recvfrom(sock->sock, buf, len, flags, from, fromLen); + if (recvResult == SOCKET_ERROR) { + errno = getWinsockErrno(); + return -1; + } + + return recvResult; +} + int Socket_setNonBlocking(Socket *sock) { unsigned long flag = 1;