Andrei Sedoi <bsnote@gmail.com>
Navaneeth Kedaram Nambiathan <navaneethkn@gmail.com>
Alex Crichton <alex@alexcrichton.com>
+Brent Cook <brent@boundary.com>
-2013.09.03, Version 0.11.12 (Unstable)
+2013.09.05, Version 0.11.13 (Unstable)
+
+Changes since version 0.11.12:
+
+* unix: define _GNU_SOURCE, exposes glibc-isms (Ben Noordhuis)
+
+* windows: check for nonconforming swprintf arguments (Brent Cook)
+
+* build: include internal headers in source list (Brent Cook)
+
+* include: merge uv_tcp_bind and uv_tcp_bind6 (Ben Noordhuis)
+
+* include: merge uv_tcp_connect and uv_tcp_connect6 (Ben Noordhuis)
+
+* include: merge uv_udp_bind and uv_udp_bind6 (Ben Noordhuis)
+
+* include: merge uv_udp_send and uv_udp_send6 (Ben Noordhuis)
+
+
+2013.09.03, Version 0.11.12 (Unstable), 82d01d5f6780d178f5176a01425ec297583c0811
Changes since version 0.11.11:
libuv_la_LDFLAGS = -no-undefined -version-info 11:0:0
libuv_la_SOURCES = src/fs-poll.c \
src/inet.c \
+ src/queue.h \
src/uv-common.c \
src/uv-common.h \
src/version.c
-D_WIN32_WINNT=0x0600
LIBS += -lws2_32 -lpsapi -lphlpapi2
libuv_la_SOURCES += src/win/async.c \
+ src/win/atomicops-inl.h \
src/win/core.c \
src/win/dl.c \
src/win/error.c \
src/win/fs.c \
src/win/getaddrinfo.c \
src/win/handle.c \
+ src/win/handle-inl.h \
+ src/win/internal.h \
src/win/loop-watcher.c \
src/win/pipe.c \
src/win/poll.c \
src/win/process-stdio.c \
src/win/process.c \
src/win/req.c \
+ src/win/req-inl.h \
src/win/signal.c \
src/win/stream.c \
+ src/win/stream-inl.h \
src/win/tcp.c \
src/win/thread.c \
src/win/threadpool.c \
src/win/udp.c \
src/win/util.c \
src/win/winapi.c \
- src/win/winsock.c
+ src/win/winapi.h \
+ src/win/winsock.c \
+ src/win/winsock.h
else # WINNT
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
AC_PREREQ(2.57)
-AC_INIT([libuv], [0.11.5], [https://github.com/joyent/libuv/issues])
+AC_INIT([libuv], [0.11.13], [https://github.com/joyent/libuv/issues])
AC_CONFIG_MACRO_DIR([m4])
m4_include([m4/libuv-extra-automake-flags.m4])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects] UV_EXTRA_AUTOMAKE_FLAGS)
*/
UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable);
-UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr_in* addr);
-UV_EXTERN int uv_tcp_bind6(uv_tcp_t* handle, const struct sockaddr_in6* addr);
+/*
+ * Bind the handle to an address and port. `addr` should point to an
+ * initialized struct sockaddr_in or struct sockaddr_in6.
+ */
+UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr);
UV_EXTERN int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name,
int* namelen);
int* namelen);
/*
- * uv_tcp_connect, uv_tcp_connect6
- * These functions establish IPv4 and IPv6 TCP connections. Provide an
- * initialized TCP handle and an uninitialized uv_connect_t*. The callback
- * will be made when the connection is established.
+ * Establish an IPv4 or IPv6 TCP connection. Provide an initialized TCP handle
+ * and an uninitialized uv_connect_t*. `addr` should point to an initialized
+ * struct sockaddr_in or struct sockaddr_in6.
+ *
+ * The callback is made when the connection has been established or when a
+ * connection error happened.
*/
UV_EXTERN int uv_tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
- const struct sockaddr_in* addr,
+ const struct sockaddr* addr,
uv_connect_cb cb);
-UV_EXTERN int uv_tcp_connect6(uv_connect_t* req,
- uv_tcp_t* handle,
- const struct sockaddr_in6* addr,
- uv_connect_cb cb);
-
/* uv_connect_t is a subclass of uv_req_t */
struct uv_connect_s {
UV_REQ_FIELDS
*/
enum uv_udp_flags {
- /* Disables dual stack mode. Used with uv_udp_bind6(). */
+ /* Disables dual stack mode. */
UV_UDP_IPV6ONLY = 1,
/*
* Indicates message was truncated because read buffer was too small. The
*
* Arguments:
* handle UDP handle. Should have been initialized with `uv_udp_init`.
- * addr struct sockaddr_in with the address and port to bind to.
+ * addr struct sockaddr_in or struct sockaddr_in6 with the address and
+ * port to bind to.
* flags Unused.
*
* Returns:
* opt-in mechanism in future versions of libuv.
*/
UV_EXTERN int uv_udp_bind(uv_udp_t* handle,
- const struct sockaddr_in* addr,
- unsigned flags);
-
-/*
- * Bind to a IPv6 address and port.
- *
- * Arguments:
- * handle UDP handle. Should have been initialized with `uv_udp_init`.
- * addr struct sockaddr_in with the address and port to bind to.
- * flags Should be 0 or UV_UDP_IPV6ONLY.
- *
- * Returns:
- * 0 on success, or an error code < 0 on failure.
- */
-UV_EXTERN int uv_udp_bind6(uv_udp_t* handle,
- const struct sockaddr_in6* addr,
- unsigned flags);
+ const struct sockaddr* addr,
+ unsigned int flags);
UV_EXTERN int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name,
int* namelen);
uv_udp_t* handle,
const uv_buf_t bufs[],
unsigned int nbufs,
- const struct sockaddr_in* addr,
+ const struct sockaddr* addr,
uv_udp_send_cb send_cb);
/*
- * Send data. If the socket has not previously been bound with `uv_udp_bind6`,
- * it is bound to ::0 (the "all interfaces" address) and a random port number.
- *
- * Arguments:
- * req UDP request handle. Need not be initialized.
- * handle UDP handle. Should have been initialized with `uv_udp_init`.
- * bufs List of buffers to send.
- * nbufs Number of buffers in `bufs`.
- * addr Address of the remote peer. See `uv_ip6_addr`.
- * send_cb Callback to invoke when the data has been sent out.
- *
- * Returns:
- * 0 on success, or an error code < 0 on failure.
- */
-UV_EXTERN int uv_udp_send6(uv_udp_send_t* req,
- uv_udp_t* handle,
- const uv_buf_t bufs[],
- unsigned int nbufs,
- const struct sockaddr_in6* addr,
- uv_udp_send_cb send_cb);
-
-/*
* Receive data. If the socket has not previously been bound with `uv_udp_bind`
* or `uv_udp_bind6`, it is bound to 0.0.0.0 (the "all interfaces" address)
* and a random port number.
* IN THE SOFTWARE.
*/
+/* Expose glibc-specific EAI_* error codes. Needs to be defined before we
+ * include any headers.
+ */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
#include "uv.h"
#include "uv-common.h"
}
-int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr_in* addr) {
- if (handle->type == UV_TCP && addr->sin_family == AF_INET)
- return uv__tcp_bind(handle, (const struct sockaddr*) addr, sizeof(*addr));
- else
- return UV_EINVAL;
-}
+int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr) {
+ unsigned int addrlen;
+ if (handle->type != UV_TCP)
+ return UV_EINVAL;
-int uv_tcp_bind6(uv_tcp_t* handle, const struct sockaddr_in6* addr) {
- if (handle->type == UV_TCP && addr->sin6_family == AF_INET6)
- return uv__tcp_bind(handle, (const struct sockaddr*) addr, sizeof(*addr));
+ if (addr->sa_family == AF_INET)
+ addrlen = sizeof(struct sockaddr_in);
+ else if (addr->sa_family == AF_INET6)
+ addrlen = sizeof(struct sockaddr_in6);
else
return UV_EINVAL;
+
+ return uv__tcp_bind(handle, addr, addrlen);
}
int uv_udp_bind(uv_udp_t* handle,
- const struct sockaddr_in* addr,
+ const struct sockaddr* addr,
unsigned int flags) {
- if (handle->type == UV_UDP && addr->sin_family == AF_INET) {
- return uv__udp_bind(handle,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- flags);
- }
- return UV_EINVAL;
-}
+ unsigned int addrlen;
+
+ if (handle->type != UV_UDP)
+ return UV_EINVAL;
+ if (addr->sa_family == AF_INET)
+ addrlen = sizeof(struct sockaddr_in);
+ else if (addr->sa_family == AF_INET6)
+ addrlen = sizeof(struct sockaddr_in6);
+ else
+ return UV_EINVAL;
-int uv_udp_bind6(uv_udp_t* handle,
- const struct sockaddr_in6* addr,
- unsigned int flags) {
- if (handle->type == UV_UDP && addr->sin6_family == AF_INET6) {
- return uv__udp_bind(handle,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- flags);
- }
- return UV_EINVAL;
+ return uv__udp_bind(handle, addr, addrlen, flags);
}
int uv_tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
- const struct sockaddr_in* addr,
+ const struct sockaddr* addr,
uv_connect_cb cb) {
- if (handle->type == UV_TCP && addr->sin_family == AF_INET) {
- return uv__tcp_connect(req,
- handle,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- cb);
- }
- return UV_EINVAL;
-}
+ unsigned int addrlen;
+ if (handle->type != UV_TCP)
+ return UV_EINVAL;
-int uv_tcp_connect6(uv_connect_t* req,
- uv_tcp_t* handle,
- const struct sockaddr_in6* addr,
- uv_connect_cb cb) {
- if (handle->type == UV_TCP && addr->sin6_family == AF_INET6) {
- return uv__tcp_connect(req,
- handle,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- cb);
- }
- return UV_EINVAL;
+ if (addr->sa_family == AF_INET)
+ addrlen = sizeof(struct sockaddr_in);
+ else if (addr->sa_family == AF_INET6)
+ addrlen = sizeof(struct sockaddr_in6);
+ else
+ return UV_EINVAL;
+
+ return uv__tcp_connect(req, handle, addr, addrlen, cb);
}
uv_udp_t* handle,
const uv_buf_t bufs[],
unsigned int nbufs,
- const struct sockaddr_in* addr,
+ const struct sockaddr* addr,
uv_udp_send_cb send_cb) {
- if (handle->type == UV_UDP && addr->sin_family == AF_INET) {
- return uv__udp_send(req,
- handle,
- bufs,
- nbufs,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- send_cb);
- }
- return UV_EINVAL;
-}
+ unsigned int addrlen;
+ if (handle->type != UV_UDP)
+ return UV_EINVAL;
-int uv_udp_send6(uv_udp_send_t* req,
- uv_udp_t* handle,
- const uv_buf_t bufs[],
- unsigned int nbufs,
- const struct sockaddr_in6* addr,
- uv_udp_send_cb send_cb) {
- if (handle->type == UV_UDP && addr->sin6_family == AF_INET6) {
- return uv__udp_send(req,
- handle,
- bufs,
- nbufs,
- (const struct sockaddr*) addr,
- sizeof(*addr),
- send_cb);
- }
- return UV_EINVAL;
+ if (addr->sa_family == AF_INET)
+ addrlen = sizeof(struct sockaddr_in);
+ else if (addr->sa_family == AF_INET6)
+ addrlen = sizeof(struct sockaddr_in6);
+ else
+ return UV_EINVAL;
+
+ return uv__udp_send(req, handle, bufs, nbufs, addr, addrlen, send_cb);
}
#define UV_VERSION_MAJOR 0
#define UV_VERSION_MINOR 11
-#define UV_VERSION_PATCH 12
+#define UV_VERSION_PATCH 13
#define UV_VERSION_IS_RELEASE 1
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc");
}
-#ifdef _MSC_VER
- swprintf(path2, len + 3, fmt, pathw);
-#else
+#ifdef _CRT_NON_CONFORMING_SWPRINTFS
swprintf(path2, fmt, pathw);
+#else
+ swprintf(path2, len + 3, fmt, pathw);
#endif
dir = FindFirstFileW(path2, &ent);
free(path2);
if (type == UV_TCP) {
ASSERT(0 == uv_tcp_init(loop, (uv_tcp_t*) &ctx.server_handle));
- ASSERT(0 == uv_tcp_bind((uv_tcp_t*) &ctx.server_handle, &listen_addr));
+ ASSERT(0 == uv_tcp_bind((uv_tcp_t*) &ctx.server_handle,
+ (const struct sockaddr*) &listen_addr));
}
else
ASSERT(0);
ASSERT(0 == uv_tcp_init(handle->loop, (uv_tcp_t*) &ctx->client_handle));
ASSERT(0 == uv_tcp_connect(&ctx->connect_req,
(uv_tcp_t*) &ctx->client_handle,
- &listen_addr,
+ (const struct sockaddr*) &listen_addr,
cl_connect_cb));
}
ASSERT(0 == uv_tcp_init(loop, handle));
ASSERT(0 == uv_tcp_connect(&ctx->connect_req,
handle,
- &listen_addr,
+ (const struct sockaddr*) &listen_addr,
cl_connect_cb));
ASSERT(0 == uv_idle_init(loop, &ctx->idle_handle));
}
pinger->tcp.data = pinger;
- uv_tcp_bind(&pinger->tcp, &client_addr);
+ ASSERT(0 == uv_tcp_bind(&pinger->tcp, (const struct sockaddr*) &client_addr));
r = uv_tcp_connect(&pinger->connect_req,
&pinger->tcp,
- &server_addr,
+ (const struct sockaddr*) &server_addr,
pinger_connect_cb);
ASSERT(!r);
}
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
- r = uv_tcp_connect(&tp->conn_req, (uv_tcp_t*) &p->stream, &addr, connect_cb);
+ r = uv_tcp_connect(&tp->conn_req,
+ (uv_tcp_t*) &p->stream,
+ (const struct sockaddr*) &addr,
+ connect_cb);
if (r) {
fprintf(stderr, "uv_tcp_connect error %s\n", uv_err_name(r));
ASSERT(0);
ASSERT(r == 0);
req = (uv_connect_t*) req_alloc();
- r = uv_tcp_connect(req, tcp, &connect_addr, connect_cb);
+ r = uv_tcp_connect(req,
+ tcp,
+ (const struct sockaddr*) &connect_addr,
+ connect_cb);
ASSERT(r == 0);
} else {
pipe = &pipe_write_handles[max_connect_socket++];
server = (uv_stream_t*)&tcpServer;
r = uv_tcp_init(loop, &tcpServer);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcpServer, &listen_addr);
+ r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &listen_addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcpServer, MAX_WRITE_HANDLES, connection_cb);
ASSERT(r == 0);
r = uv_tcp_init(loop, &tcp_client);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &tcp_client, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &tcp_client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
start = uv_hrtime();
&s->udp_handle,
bufs,
ARRAY_SIZE(bufs),
- &s->addr,
+ (const struct sockaddr*) &s->addr,
send_cb));
send_cb_called++;
}
struct sockaddr_in addr;
ASSERT(0 == uv_ip4_addr("0.0.0.0", BASE_PORT + i, &addr));
ASSERT(0 == uv_udp_init(loop, &s->udp_handle));
- ASSERT(0 == uv_udp_bind(&s->udp_handle, &addr, 0));
+ ASSERT(0 == uv_udp_bind(&s->udp_handle, (const struct sockaddr*) &addr, 0));
ASSERT(0 == uv_udp_recv_start(&s->udp_handle, alloc_cb, recv_cb));
uv_unref((uv_handle_t*)&s->udp_handle);
}
&s->udp_handle,
bufs,
ARRAY_SIZE(bufs),
- &s->addr,
+ (const struct sockaddr*) &s->addr,
send_cb));
}
r = uv_tcp_init(loop, &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, &addr);
+ r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 128, connection_cb);
return 1;
}
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
if (r) {
/* TODO: Error codes */
fprintf(stderr, "Bind error\n");
unsigned flags) {
uv_udp_send_t* req;
uv_buf_t sndbuf;
- int r;
ASSERT(nread > 0);
ASSERT(addr->sa_family == AF_INET);
ASSERT(req != NULL);
sndbuf = *rcvbuf;
- r = uv_udp_send(req,
- handle,
- &sndbuf,
- 1,
- (const struct sockaddr_in*) addr,
- on_send);
- ASSERT(r == 0);
+ ASSERT(0 == uv_udp_send(req, handle, &sndbuf, 1, addr, on_send));
}
return 1;
}
- r = uv_tcp_bind(&tcpServer, &addr);
+ r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr);
if (r) {
/* TODO: Error codes */
fprintf(stderr, "Bind error\n");
}
/* IPv6 is optional as not all platforms support it */
- r = uv_tcp_bind6(&tcpServer, &addr6);
+ r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr6);
if (r) {
/* show message but return OK */
fprintf(stderr, "IPv6 not supported\n");
nested++;
- if (uv_tcp_connect(&connect_req, &client, &addr, connect_cb)) {
+ if (uv_tcp_connect(&connect_req,
+ &client,
+ (const struct sockaddr*) &addr,
+ connect_cb)) {
FATAL("uv_tcp_connect failed");
}
nested--;
/* We are never doing multiple reads/connects at a time anyway. */
/* so these handles can be pre-initialized. */
- uv_tcp_bind(&tcp, &client_addr);
- r = uv_tcp_connect(&req, &tcp, &server_addr, connect_cb);
+ ASSERT(0 == uv_tcp_bind(&tcp, (const struct sockaddr*) &client_addr));
+
+ r = uv_tcp_connect(&req,
+ &tcp,
+ (const struct sockaddr*) &server_addr,
+ connect_cb);
ASSERT(!r);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
r = uv_tcp_init(uv_default_loop(), server);
ASSERT(r == 0);
- r = uv_tcp_bind(server, &addr);
+ r = uv_tcp_bind(server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)server, 128, connection_cb);
r = uv_tcp_init(uv_default_loop(), client);
ASSERT(r == 0);
- r = uv_tcp_connect(connect_req, client, &addr, connect_cb);
+ r = uv_tcp_connect(connect_req,
+ client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
}
return 1;
}
- r = uv_tcp_bind(&tcpServer, &addr);
+ r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr);
if (r) {
fprintf(stderr, "Bind error\n");
return 1;
tcp.data = &connect_req;
ASSERT(!r);
- r = uv_tcp_connect(&connect_req, &tcp, &server_addr, on_connect);
+ r = uv_tcp_connect(&connect_req,
+ &tcp,
+ (const struct sockaddr*) &server_addr,
+ on_connect);
ASSERT(!r);
/* Fetch the actual port used by the connecting socket. */
return 1;
}
- r = uv_udp_bind(&udpServer, &addr, 0);
+ r = uv_udp_bind(&udpServer, (const struct sockaddr*) &addr, 0);
if (r) {
fprintf(stderr, "Bind error\n");
return 1;
buf = uv_buf_init("PING", 4);
ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr));
- r = uv_udp_send(&send_req, &udp, &buf, 1, &server_addr, udp_send);
+ r = uv_udp_send(&send_req,
+ &udp,
+ &buf,
+ 1,
+ (const struct sockaddr*) &server_addr,
+ udp_send);
ASSERT(!r);
}
r = uv_tcp_init(uv_default_loop(), &ctx.send.tcp);
ASSERT(r == 0);
- r = uv_tcp_bind(&ctx.send.tcp, &addr);
+ r = uv_tcp_bind(&ctx.send.tcp, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = run_test();
r = uv_tcp_connect(&conn->conn_req,
(uv_tcp_t*) &conn->conn,
- &addr,
+ (const struct sockaddr*) &addr,
connect_cb);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_tcp_simultaneous_accepts(&server, 1);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_tcp_simultaneous_accepts(&server, 0);
r = uv_tcp_init(uv_default_loop(), &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, &addr);
+ r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
if (!listen_after_write) {
ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
- r = uv_tcp_bind(&tcp_server, &addr);
+ r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 12, ipc_on_connection_tcp_conn);
r = uv_tcp_connect(&conn.conn_req,
(uv_tcp_t*) &conn.conn,
- &addr,
+ (const struct sockaddr*) &addr,
connect_child_process_cb);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server, 128, connection_cb);
r = uv_tcp_init(uv_default_loop(), &client);
ASSERT(r == 0);
- r = uv_tcp_connect(connect_req, &client, &addr, connect_cb);
+ r = uv_tcp_connect(connect_req,
+ &client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
}
/* We are never doing multiple reads/connects at a time anyway. */
/* so these handles can be pre-initialized. */
- r = uv_tcp_connect6(&pinger->connect_req,
- &pinger->stream.tcp,
- &server_addr,
- pinger_on_connect);
+ r = uv_tcp_connect(&pinger->connect_req,
+ &pinger->stream.tcp,
+ (const struct sockaddr*) &server_addr,
+ pinger_on_connect);
ASSERT(!r);
/* Synchronous connect callbacks are not allowed. */
/* so these handles can be pre-initialized. */
r = uv_tcp_connect(&pinger->connect_req,
&pinger->stream.tcp,
- &server_addr,
+ (const struct sockaddr*) &server_addr,
pinger_on_connect);
ASSERT(!r);
uv_tcp_t h;
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
uv_tcp_init(uv_default_loop(), &h);
- uv_tcp_connect(&connect_req, &h, &addr, connect_and_shutdown);
+ uv_tcp_connect(&connect_req,
+ &h,
+ (const struct sockaddr*) &addr,
+ connect_and_shutdown);
uv_unref((uv_handle_t*)&h);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(connect_cb_called == 1);
uv_tcp_t h;
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
uv_tcp_init(uv_default_loop(), &h);
- uv_tcp_connect(&connect_req, &h, &addr, connect_and_write);
+ uv_tcp_connect(&connect_req,
+ &h,
+ (const struct sockaddr*) &addr,
+ connect_and_write);
uv_unref((uv_handle_t*)&h);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(connect_cb_called == 1);
uv_udp_t h;
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
uv_udp_init(uv_default_loop(), &h);
- uv_udp_bind(&h, &addr, 0);
+ uv_udp_bind(&h, (const struct sockaddr*) &addr, 0);
uv_udp_recv_start(&h, (uv_alloc_cb)fail_cb, (uv_udp_recv_cb)fail_cb);
uv_unref((uv_handle_t*)&h);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
uv_udp_init(uv_default_loop(), &h);
- uv_udp_send(&req, &h, &buf, 1, &addr, (uv_udp_send_cb)req_cb);
+ uv_udp_send(&req,
+ &h,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ (uv_udp_send_cb) req_cb);
uv_unref((uv_handle_t*)&h);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(req_cb_called == 1);
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
r = uv_tcp_init(uv_default_loop(), &h);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &h, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &h,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &tcp);
ASSERT(!r);
- r = uv_tcp_connect(&connect_req, &tcp, &server_addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &tcp,
+ (const struct sockaddr*) &server_addr,
+ connect_cb);
ASSERT(!r);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0);
- r = uv_tcp_bind(&server1, &addr);
+ r = uv_tcp_bind(&server1, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0);
- r = uv_tcp_bind(&server2, &addr);
+ r = uv_tcp_bind(&server2, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server1, 128, NULL);
ASSERT(r == 0);
/* It seems that Linux is broken here - bind succeeds. */
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0 || r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, garbage_addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) garbage_addr);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr1);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr1);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr2);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr2);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
MAKE_VALGRIND_HAPPY();
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server1, &addr);
+ r = uv_tcp_bind(&server1, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server2, &addr);
+ r = uv_tcp_bind(&server2, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server1, 128, NULL);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, garbage_addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) garbage_addr);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, &addr1);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr1);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, &addr2);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr2);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, &addr);
+ r = uv_tcp_bind(&server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
MAKE_VALGRIND_HAPPY();
loop = uv_default_loop();
ASSERT(0 == uv_ip4_addr("1.2.3.4", TEST_PORT, &addr));
ASSERT(0 == uv_tcp_init(loop, &tcp_handle));
- ASSERT(0 == uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb));
+ ASSERT(0 == uv_tcp_connect(&connect_req,
+ &tcp_handle,
+ (const struct sockaddr*) &addr,
+ connect_cb));
ASSERT(0 == uv_timer_init(loop, &timer1_handle));
ASSERT(0 == uv_timer_start(&timer1_handle, timer1_cb, 50, 0));
ASSERT(0 == uv_timer_init(loop, &timer2_handle));
r = uv_tcp_init(loop, handle);
ASSERT(r == 0);
- r = uv_tcp_bind(handle, &addr);
+ r = uv_tcp_bind(handle, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)handle, 128, connection_cb);
r = uv_tcp_init(loop, &tcp_handle);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &tcp_handle,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
ASSERT(write_cb_called == 0);
r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb);
ASSERT(r == UV_EBADF);
- r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &conn,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_connect(&req, &server, garbage_addr, connect_cb);
+ r = uv_tcp_connect(&req,
+ &server,
+ (const struct sockaddr*) garbage_addr,
+ connect_cb);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_init(uv_default_loop(), &conn);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &conn,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_connect6(&req, &server, garbage_addr, connect_cb);
+ r = uv_tcp_connect(&req,
+ &server,
+ (const struct sockaddr*) garbage_addr,
+ connect_cb);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
r = uv_tcp_open(&client, sock);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &client, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle));
ASSERT(0 == uv_tcp_init(uv_default_loop(), &tcp_handle));
- ASSERT(0 == uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb));
+ ASSERT(0 == uv_tcp_connect(&connect_req,
+ &tcp_handle,
+ (const struct sockaddr*) &addr,
+ connect_cb));
ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
MAKE_VALGRIND_HAPPY();
r = uv_tcp_init(loop, &conn);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &conn,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
r = uv_run(loop, UV_RUN_DEFAULT);
ASSERT(0 == uv_tcp_init(loop, &server_handle));
ASSERT(0 == uv_tcp_init(loop, &client_handle));
ASSERT(0 == uv_tcp_init(loop, &peer_handle));
- ASSERT(0 == uv_tcp_bind(&server_handle, &addr));
+ ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr));
ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 1, connection_cb));
- ASSERT(0 == uv_tcp_connect(&connect_req, &client_handle, &addr, connect_cb));
+ ASSERT(0 == uv_tcp_connect(&connect_req,
+ &client_handle,
+ (const struct sockaddr*) &addr,
+ connect_cb));
ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
/* This is somewhat inexact but the idea is that the event loop should not
r = uv_tcp_init(loop, &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, &addr);
+ r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 1, connection_cb);
r = uv_tcp_init(loop, &tcp_client);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &tcp_client, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &tcp_client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
r = uv_run(loop, UV_RUN_DEFAULT);
r = uv_tcp_init(uv_default_loop(), &client);
ASSERT(r == 0);
- r = uv_tcp_connect(&connect_req, &client, &addr, connect_cb);
+ r = uv_tcp_connect(&connect_req,
+ &client,
+ (const struct sockaddr*) &addr,
+ connect_cb);
ASSERT(r == 0);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
buf = uv_buf_init(dgram, sizeof dgram);
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
- r = uv_udp_send(&req_, &handle_, &buf, 1, &addr, send_cb);
+ r = uv_udp_send(&req_,
+ &handle_,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ send_cb);
ASSERT(r == 0);
ASSERT(close_cb_called == 0);
r = uv_udp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_udp_bind6(&server, &addr6, bind_flags);
+ r = uv_udp_bind(&server, (const struct sockaddr*) &addr6, bind_flags);
ASSERT(r == 0);
r = uv_udp_recv_start(&server, alloc_cb, recv_cb);
buf = uv_buf_init("PING", 4);
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
- r = uv_udp_send(&req_, &client, &buf, 1, &addr, send_cb);
+ r = uv_udp_send(&req_,
+ &client,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ send_cb);
ASSERT(r == 0);
r = uv_timer_init(uv_default_loop(), &timeout);
ASSERT(r == 0);
/* bind to the desired port */
- r = uv_udp_bind(&client, &addr, 0);
+ r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
/* join the multicast channel */
buf = uv_buf_init("PING", 4);
/* server sends "PING" */
- r = uv_udp_send(&req, &server, &buf, 1, &addr, sv_send_cb);
+ r = uv_udp_send(&req,
+ &server,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ sv_send_cb);
ASSERT(r == 0);
ASSERT(close_cb_called == 0);
ASSERT(r == 0);
ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &addr));
- r = uv_udp_bind(&server, &addr, 0);
+ r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
r = uv_udp_set_multicast_ttl(&server, 32);
/* server sends "PING" */
buf = uv_buf_init("PING", 4);
ASSERT(0 == uv_ip4_addr("239.255.0.1", TEST_PORT, &addr));
- r = uv_udp_send(&req, &server, &buf, 1, &addr, sv_send_cb);
+ r = uv_udp_send(&req,
+ &server,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ sv_send_cb);
ASSERT(r == 0);
ASSERT(close_cb_called == 0);
r = uv_udp_open(&client, sock);
ASSERT(r == 0);
- r = uv_udp_bind(&client, &addr, 0);
+ r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
r = uv_udp_recv_start(&client, alloc_cb, recv_cb);
ASSERT(r == 0);
- r = uv_udp_send(&send_req, &client, &buf, 1, &addr, send_cb);
+ r = uv_udp_send(&send_req,
+ &client,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ send_cb);
ASSERT(r == 0);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
uv_unref((uv_handle_t*)&h); /* don't keep the loop alive */
- r = uv_udp_bind(&h, &addr, 0);
+ r = uv_udp_bind(&h, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
r = uv_udp_set_broadcast(&h, 1);
ASSERT(req != NULL);
sndbuf = uv_buf_init("PONG", 4);
- r = uv_udp_send(req,
- handle,
- &sndbuf,
- 1,
- (const struct sockaddr_in*) addr,
- sv_send_cb);
+ r = uv_udp_send(req, handle, &sndbuf, 1, addr, sv_send_cb);
ASSERT(r == 0);
sv_recv_cb_called++;
r = uv_udp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_udp_bind(&server, &addr, 0);
+ r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb);
/* client sends "PING", expects "PONG" */
buf = uv_buf_init("PING", 4);
- r = uv_udp_send(&req, &client, &buf, 1, &addr, cl_send_cb);
+ r = uv_udp_send(&req,
+ &client,
+ &buf,
+ 1,
+ (const struct sockaddr*) &addr,
+ cl_send_cb);
ASSERT(r == 0);
ASSERT(close_cb_called == 0);
sockaddr_in addr;
int err = uv_ip4_addr(*ip_address, port, &addr);
if (err == 0)
- err = uv_tcp_bind(&wrap->handle_, &addr);
+ err = uv_tcp_bind(&wrap->handle_, reinterpret_cast<const sockaddr*>(&addr));
args.GetReturnValue().Set(err);
}
sockaddr_in6 addr;
int err = uv_ip6_addr(*ip6_address, port, &addr);
if (err == 0)
- err = uv_tcp_bind6(&wrap->handle_, &addr);
+ err = uv_tcp_bind(&wrap->handle_, reinterpret_cast<const sockaddr*>(&addr));
args.GetReturnValue().Set(err);
}
if (err == 0) {
ConnectWrap* req_wrap = new ConnectWrap(req_wrap_obj);
- err = uv_tcp_connect(&req_wrap->req_, &wrap->handle_, &addr, AfterConnect);
+ err = uv_tcp_connect(&req_wrap->req_,
+ &wrap->handle_,
+ reinterpret_cast<const sockaddr*>(&addr),
+ AfterConnect);
req_wrap->Dispatched();
if (err) delete req_wrap;
}
if (err == 0) {
ConnectWrap* req_wrap = new ConnectWrap(req_wrap_obj);
- err = uv_tcp_connect6(&req_wrap->req_, &wrap->handle_, &addr, AfterConnect);
+ err = uv_tcp_connect(&req_wrap->req_,
+ &wrap->handle_,
+ reinterpret_cast<const sockaddr*>(&addr),
+ AfterConnect);
req_wrap->Dispatched();
if (err) delete req_wrap;
}
void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) {
HandleScope scope(node_isolate);
- int err;
UDPWrap* wrap;
NODE_UNWRAP(args.This(), UDPWrap, wrap);
String::Utf8Value address(args[0]);
const int port = args[1]->Uint32Value();
const int flags = args[2]->Uint32Value();
+ char addr[sizeof(sockaddr_in6)];
+ int err;
switch (family) {
case AF_INET:
- {
- sockaddr_in addr;
- err = uv_ip4_addr(*address, port, &addr);
- if (err == 0)
- err = uv_udp_bind(&wrap->handle_, &addr, flags);
- break;
- }
+ err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr));
+ break;
case AF_INET6:
- {
- sockaddr_in6 addr;
- err = uv_ip6_addr(*address, port, &addr);
- if (err == 0)
- err = uv_udp_bind6(&wrap->handle_, &addr, flags);
- break;
- }
+ err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr));
+ break;
default:
assert(0 && "unexpected address family");
abort();
}
+ if (err == 0) {
+ err = uv_udp_bind(&wrap->handle_,
+ reinterpret_cast<const sockaddr*>(&addr),
+ flags);
+ }
+
args.GetReturnValue().Set(err);
}
void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
HandleScope scope(node_isolate);
- int err;
UDPWrap* wrap;
NODE_UNWRAP(args.This(), UDPWrap, wrap);
uv_buf_t buf = uv_buf_init(Buffer::Data(buffer_obj) + offset,
length);
+ char addr[sizeof(sockaddr_in6)];
+ int err;
switch (family) {
case AF_INET:
- {
- sockaddr_in addr;
- err = uv_ip4_addr(*address, port, &addr);
- if (err == 0) {
- err = uv_udp_send(&req_wrap->req_,
- &wrap->handle_,
- &buf,
- 1,
- &addr,
- OnSend);
- }
- break;
- }
+ err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr));
+ break;
case AF_INET6:
- {
- sockaddr_in6 addr;
- err = uv_ip6_addr(*address, port, &addr);
- if (err == 0) {
- err = uv_udp_send6(&req_wrap->req_,
- &wrap->handle_,
- &buf,
- 1,
- &addr,
- OnSend);
- }
- break;
- }
+ err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr));
+ break;
default:
assert(0 && "unexpected address family");
abort();
}
+ if (err == 0) {
+ err = uv_udp_send(&req_wrap->req_,
+ &wrap->handle_,
+ &buf,
+ 1,
+ reinterpret_cast<const sockaddr*>(&addr),
+ OnSend);
+ }
+
req_wrap->Dispatched();
if (err) delete req_wrap;