From 97cc2d49628610d537bdcb18eb48fa1573cb9baf Mon Sep 17 00:00:00 2001 From: pfilipch Date: Thu, 8 Feb 2018 17:35:15 +0300 Subject: [PATCH] add udp_send_datagram --- src/sockfun.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/sockfun.cpp b/src/sockfun.cpp index 400cde8..7115657 100644 --- a/src/sockfun.cpp +++ b/src/sockfun.cpp @@ -25,34 +25,45 @@ bool validate_host_address(uint32_t host_addr); bool recv_data(SOCKET s, char *buf, size_t nbytes, bool accept_incomplete_packet, size_t *packet_size) { - ssize_t nret, nrecv = 0; + ssize_t nret, nrecv = 0; if (!buf || !nbytes) { return false; } do { - nret = recv(s, &buf[nrecv], ssize_t(nbytes)-nrecv, 0); + nret = recv(s, &buf[nrecv], ssize_t(nbytes)-nrecv, 0); if (nret > 0) { nrecv += nret; } - } while(nret != SOCKET_ERROR && !accept_incomplete_packet && (nrecv < int(nbytes))); + } while(nret != SOCKET_ERROR && !accept_incomplete_packet && (nrecv < int(nbytes))); if (accept_incomplete_packet) { if (packet_size) *packet_size = nrecv; return (nrecv > 0); } else { - return (nrecv == int(nbytes)); + return (nrecv == int(nbytes)); } } bool send_data(SOCKET s, const char *buf, size_t nbytes) { - ssize_t nret; + ssize_t nret; if (!buf || !nbytes) { return false; } - nret = send(s, buf, ssize_t(nbytes), 0); - return (nret == ssize_t(nbytes)); + nret = send(s, buf, ssize_t(nbytes), 0); + return (nret == ssize_t(nbytes)); +} + +bool udp_send_datagram(SOCKET s, char *buf, int length, sockaddr_in *send_addr) +{ + int nret; + int tolen = sizeof(sockaddr_in); + if (!buf || !length) { + return false; + } + nret = sendto(s, buf, length, 0, reinterpret_cast(send_addr), tolen); + return (nret == length); } bool udp_recv_datagram(SOCKET s, char *buf, size_t max_length, size_t *datagram_size, sockaddr_in *from_addr) @@ -64,7 +75,7 @@ bool udp_recv_datagram(SOCKET s, char *buf, size_t max_length, size_t *datagram_ if (s == INVALID_SOCKET) { return false; } - nret = recvfrom(s, buf, ssize_t(max_length), 0, reinterpret_cast(&from_addr_l), &from_size); + nret = recvfrom(s, buf, ssize_t(max_length), 0, reinterpret_cast(&from_addr_l), &from_size); if (nret > 0) { if (from_addr) { -- GitLab