win,udp: implements uv_udp_try_send

PR-URL: https://github.com/libuv/libuv/pull/1385
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
This commit is contained in:
Barnabas Gema 2017-01-26 16:40:56 +01:00 committed by Santiago Gimeno
parent 4776195cdf
commit c33fe9874a
No known key found for this signature in database
GPG Key ID: F28C3C8DA33C03BE
2 changed files with 36 additions and 13 deletions

View File

@ -922,5 +922,40 @@ int uv__udp_try_send(uv_udp_t* handle,
unsigned int nbufs,
const struct sockaddr* addr,
unsigned int addrlen) {
return UV_ENOSYS;
DWORD bytes;
const struct sockaddr* bind_addr;
int err;
assert(nbufs > 0);
/* Already sending a message.*/
if (handle->send_queue_count != 0)
return UV_EAGAIN;
if (!(handle->flags & UV_HANDLE_BOUND)) {
if (addrlen == sizeof(uv_addr_ip4_any_))
bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_;
else if (addrlen == sizeof(uv_addr_ip6_any_))
bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_;
else
abort();
err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0);
if (err)
return uv_translate_sys_error(err);
}
err = WSASendTo(handle->socket,
(WSABUF*)bufs,
nbufs,
&bytes,
0,
addr,
addrlen,
NULL,
NULL);
if (err)
return uv_translate_sys_error(WSAGetLastError());
return bytes;
}

View File

@ -26,16 +26,6 @@
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
TEST_IMPL(udp_try_send) {
MAKE_VALGRIND_HAPPY();
return 0;
}
#else /* !_WIN32 */
#define CHECK_HANDLE(handle) \
ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client)
@ -129,5 +119,3 @@ TEST_IMPL(udp_try_send) {
MAKE_VALGRIND_HAPPY();
return 0;
}
#endif /* !_WIN32 */