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:
parent
4776195cdf
commit
c33fe9874a
@ -922,5 +922,40 @@ int uv__udp_try_send(uv_udp_t* handle,
|
|||||||
unsigned int nbufs,
|
unsigned int nbufs,
|
||||||
const struct sockaddr* addr,
|
const struct sockaddr* addr,
|
||||||
unsigned int addrlen) {
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,16 +26,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
TEST_IMPL(udp_try_send) {
|
|
||||||
|
|
||||||
MAKE_VALGRIND_HAPPY();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* !_WIN32 */
|
|
||||||
|
|
||||||
#define CHECK_HANDLE(handle) \
|
#define CHECK_HANDLE(handle) \
|
||||||
ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client)
|
ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client)
|
||||||
|
|
||||||
@ -129,5 +119,3 @@ TEST_IMPL(udp_try_send) {
|
|||||||
MAKE_VALGRIND_HAPPY();
|
MAKE_VALGRIND_HAPPY();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !_WIN32 */
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user