API Change: Pass sockaddr_in by value instead of reference
This commit is contained in:
parent
11a4ad50c8
commit
6b07791598
@ -189,8 +189,8 @@ static void pinger_new() {
|
|||||||
uv_req_init(&pinger->connect_req, (uv_handle_t*)&pinger->tcp,
|
uv_req_init(&pinger->connect_req, (uv_handle_t*)&pinger->tcp,
|
||||||
pinger_connect_cb);
|
pinger_connect_cb);
|
||||||
|
|
||||||
uv_bind(&pinger->tcp, (struct sockaddr*)&client_addr);
|
uv_bind(&pinger->tcp, client_addr);
|
||||||
r = uv_connect(&pinger->connect_req, (struct sockaddr*)&server_addr);
|
r = uv_connect(&pinger->connect_req, server_addr);
|
||||||
ASSERT(!r);
|
ASSERT(!r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -244,7 +244,7 @@ static void maybe_connect_some() {
|
|||||||
|
|
||||||
req = req_alloc();
|
req = req_alloc();
|
||||||
uv_req_init(req, (uv_handle_t*)tcp, connect_cb);
|
uv_req_init(req, (uv_handle_t*)tcp, connect_cb);
|
||||||
r = uv_connect(req, (struct sockaddr*) &connect_addr);
|
r = uv_connect(req, connect_addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -351,7 +351,7 @@ HELPER_IMPL(pump_server) {
|
|||||||
/* Server */
|
/* Server */
|
||||||
r = uv_tcp_init(&server, NULL, NULL);
|
r = uv_tcp_init(&server, NULL, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &listen_addr);
|
r = uv_bind(&server, listen_addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_listen(&server, MAX_WRITE_HANDLES, accept_cb);
|
r = uv_listen(&server, MAX_WRITE_HANDLES, accept_cb);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|||||||
@ -146,7 +146,7 @@ static int echo_start(int port) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = uv_bind(&server, (struct sockaddr*) &addr);
|
r = uv_bind(&server, addr);
|
||||||
if (r) {
|
if (r) {
|
||||||
/* TODO: Error codes */
|
/* TODO: Error codes */
|
||||||
fprintf(stderr, "Bind error\n");
|
fprintf(stderr, "Bind error\n");
|
||||||
|
|||||||
@ -52,12 +52,12 @@ TEST_IMPL(bind_error_addrinuse) {
|
|||||||
|
|
||||||
r = uv_tcp_init(&server1, close_cb, NULL);
|
r = uv_tcp_init(&server1, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server1, (struct sockaddr*) &addr);
|
r = uv_bind(&server1, addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
r = uv_tcp_init(&server2, close_cb, NULL);
|
r = uv_tcp_init(&server2, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server2, (struct sockaddr*) &addr);
|
r = uv_bind(&server2, addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
r = uv_listen(&server1, 128, NULL);
|
r = uv_listen(&server1, 128, NULL);
|
||||||
@ -87,7 +87,7 @@ TEST_IMPL(bind_error_addrnotavail_1) {
|
|||||||
|
|
||||||
r = uv_tcp_init(&server, close_cb, NULL);
|
r = uv_tcp_init(&server, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &addr);
|
r = uv_bind(&server, addr);
|
||||||
|
|
||||||
/* It seems that Linux is broken here - bind succeeds. */
|
/* It seems that Linux is broken here - bind succeeds. */
|
||||||
if (r == -1) {
|
if (r == -1) {
|
||||||
@ -113,7 +113,7 @@ TEST_IMPL(bind_error_addrnotavail_2) {
|
|||||||
|
|
||||||
r = uv_tcp_init(&server, close_cb, NULL);
|
r = uv_tcp_init(&server, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &addr);
|
r = uv_bind(&server, addr);
|
||||||
ASSERT(r == -1);
|
ASSERT(r == -1);
|
||||||
ASSERT(uv_last_error().code == UV_EADDRNOTAVAIL);
|
ASSERT(uv_last_error().code == UV_EADDRNOTAVAIL);
|
||||||
|
|
||||||
@ -129,14 +129,17 @@ TEST_IMPL(bind_error_addrnotavail_2) {
|
|||||||
|
|
||||||
TEST_IMPL(bind_error_fault) {
|
TEST_IMPL(bind_error_fault) {
|
||||||
char garbage[] = "blah blah blah blah blah blah blah blah blah blah blah blah";
|
char garbage[] = "blah blah blah blah blah blah blah blah blah blah blah blah";
|
||||||
|
struct sockaddr_in* garbage_addr;
|
||||||
uv_tcp_t server;
|
uv_tcp_t server;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
garbage_addr = (struct sockaddr_in*) &garbage;
|
||||||
|
|
||||||
uv_init(alloc_cb);
|
uv_init(alloc_cb);
|
||||||
|
|
||||||
r = uv_tcp_init(&server, close_cb, NULL);
|
r = uv_tcp_init(&server, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &garbage);
|
r = uv_bind(&server, *garbage_addr);
|
||||||
ASSERT(r == -1);
|
ASSERT(r == -1);
|
||||||
|
|
||||||
ASSERT(uv_last_error().code == UV_EFAULT);
|
ASSERT(uv_last_error().code == UV_EFAULT);
|
||||||
@ -162,9 +165,9 @@ TEST_IMPL(bind_error_inval) {
|
|||||||
|
|
||||||
r = uv_tcp_init(&server, close_cb, NULL);
|
r = uv_tcp_init(&server, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &addr1);
|
r = uv_bind(&server, addr1);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
r = uv_bind(&server, (struct sockaddr*) &addr2);
|
r = uv_bind(&server, addr2);
|
||||||
ASSERT(r == -1);
|
ASSERT(r == -1);
|
||||||
|
|
||||||
ASSERT(uv_last_error().code == UV_EINVAL);
|
ASSERT(uv_last_error().code == UV_EINVAL);
|
||||||
|
|||||||
@ -193,7 +193,7 @@ TEST_IMPL(callback_stack) {
|
|||||||
|
|
||||||
nested++;
|
nested++;
|
||||||
uv_req_init(&connect_req, (uv_handle_t*)&client, connect_cb);
|
uv_req_init(&connect_req, (uv_handle_t*)&client, connect_cb);
|
||||||
if (uv_connect(&connect_req, (struct sockaddr*) &addr)) {
|
if (uv_connect(&connect_req, addr)) {
|
||||||
FATAL("uv_connect failed");
|
FATAL("uv_connect failed");
|
||||||
}
|
}
|
||||||
nested--;
|
nested--;
|
||||||
|
|||||||
@ -72,8 +72,8 @@ TEST_IMPL(connection_fail) {
|
|||||||
/* so these handles can be pre-initialized. */
|
/* so these handles can be pre-initialized. */
|
||||||
uv_req_init(&req, (uv_handle_t*)&tcp, on_connect);
|
uv_req_init(&req, (uv_handle_t*)&tcp, on_connect);
|
||||||
|
|
||||||
uv_bind(&tcp, (struct sockaddr*)&client_addr);
|
uv_bind(&tcp, client_addr);
|
||||||
r = uv_connect(&req, (struct sockaddr*)&server_addr);
|
r = uv_connect(&req, server_addr);
|
||||||
ASSERT(!r);
|
ASSERT(!r);
|
||||||
|
|
||||||
uv_run();
|
uv_run();
|
||||||
|
|||||||
@ -101,7 +101,7 @@ static void start_server() {
|
|||||||
r = uv_tcp_init(server, close_cb, NULL);
|
r = uv_tcp_init(server, close_cb, NULL);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
r = uv_bind(server, (struct sockaddr*) &addr);
|
r = uv_bind(server, addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
r = uv_listen(server, 128, accept_cb);
|
r = uv_listen(server, 128, accept_cb);
|
||||||
@ -153,7 +153,7 @@ static void client_connect() {
|
|||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
uv_req_init(connect_req, (uv_handle_t*)client, connect_cb);
|
uv_req_init(connect_req, (uv_handle_t*)client, connect_cb);
|
||||||
r = uv_connect(connect_req, (struct sockaddr*)&addr);
|
r = uv_connect(connect_req, addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -152,7 +152,7 @@ static void pinger_new() {
|
|||||||
uv_req_init(&pinger->connect_req, (uv_handle_t*)(&pinger->tcp),
|
uv_req_init(&pinger->connect_req, (uv_handle_t*)(&pinger->tcp),
|
||||||
pinger_on_connect);
|
pinger_on_connect);
|
||||||
|
|
||||||
r = uv_connect(&pinger->connect_req, (struct sockaddr*)&server_addr);
|
r = uv_connect(&pinger->connect_req, server_addr);
|
||||||
ASSERT(!r);
|
ASSERT(!r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -184,7 +184,7 @@ TEST_IMPL(tcp_writealot) {
|
|||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
uv_req_init(connect_req, (uv_handle_t*)client, connect_cb);
|
uv_req_init(connect_req, (uv_handle_t*)client, connect_cb);
|
||||||
r = uv_connect(connect_req, (struct sockaddr*)&addr);
|
r = uv_connect(connect_req, addr);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
uv_run();
|
uv_run();
|
||||||
|
|||||||
23
uv-unix.c
23
uv-unix.c
@ -244,13 +244,14 @@ int uv_tcp_init(uv_tcp_t* tcp, uv_close_cb close_cb, void* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int uv_bind(uv_tcp_t* tcp, struct sockaddr* addr) {
|
int uv_bind(uv_tcp_t* tcp, struct sockaddr_in addr) {
|
||||||
int addrsize;
|
int addrsize = sizeof(struct sockaddr_in);
|
||||||
int domain;
|
int domain = AF_INET;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (tcp->fd <= 0) {
|
if (tcp->fd <= 0) {
|
||||||
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
uv_err_new((uv_handle_t*)tcp, errno);
|
uv_err_new((uv_handle_t*)tcp, errno);
|
||||||
return -1;
|
return -1;
|
||||||
@ -264,18 +265,12 @@ int uv_bind(uv_tcp_t* tcp, struct sockaddr* addr) {
|
|||||||
|
|
||||||
assert(tcp->fd >= 0);
|
assert(tcp->fd >= 0);
|
||||||
|
|
||||||
if (addr->sa_family == AF_INET) {
|
if (addr.sin_family != AF_INET) {
|
||||||
addrsize = sizeof(struct sockaddr_in);
|
|
||||||
domain = AF_INET;
|
|
||||||
} else if (addr->sa_family == AF_INET6) {
|
|
||||||
addrsize = sizeof(struct sockaddr_in6);
|
|
||||||
domain = AF_INET6;
|
|
||||||
} else {
|
|
||||||
uv_err_new((uv_handle_t*)tcp, EFAULT);
|
uv_err_new((uv_handle_t*)tcp, EFAULT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = bind(tcp->fd, addr, addrsize);
|
r = bind(tcp->fd, (struct sockaddr*) &addr, addrsize);
|
||||||
tcp->delayed_error = 0;
|
tcp->delayed_error = 0;
|
||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
@ -794,11 +789,12 @@ static void uv__tcp_connect(uv_tcp_t* tcp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int uv_connect(uv_req_t* req, struct sockaddr* addr) {
|
int uv_connect(uv_req_t* req, struct sockaddr_in addr) {
|
||||||
uv_tcp_t* tcp = (uv_tcp_t*)req->handle;
|
uv_tcp_t* tcp = (uv_tcp_t*)req->handle;
|
||||||
|
|
||||||
if (tcp->fd <= 0) {
|
if (tcp->fd <= 0) {
|
||||||
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
uv_err_new((uv_handle_t*)tcp, errno);
|
uv_err_new((uv_handle_t*)tcp, errno);
|
||||||
return -1;
|
return -1;
|
||||||
@ -826,8 +822,9 @@ int uv_connect(uv_req_t* req, struct sockaddr* addr) {
|
|||||||
tcp->connect_req = req;
|
tcp->connect_req = req;
|
||||||
|
|
||||||
int addrsize = sizeof(struct sockaddr_in);
|
int addrsize = sizeof(struct sockaddr_in);
|
||||||
|
assert(addr.sin_family == AF_INET);
|
||||||
|
|
||||||
int r = connect(tcp->fd, addr, addrsize);
|
int r = connect(tcp->fd, (struct sockaddr*)&addr, addrsize);
|
||||||
tcp->delayed_error = 0;
|
tcp->delayed_error = 0;
|
||||||
|
|
||||||
if (r != 0 && errno != EINPROGRESS) {
|
if (r != 0 && errno != EINPROGRESS) {
|
||||||
|
|||||||
38
uv-win.c
38
uv-win.c
@ -697,20 +697,19 @@ struct sockaddr_in uv_ip4_addr(char* ip, int port) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int uv_bind(uv_tcp_t* handle, struct sockaddr* addr) {
|
int uv_bind(uv_tcp_t* handle, struct sockaddr_in addr) {
|
||||||
int addrsize;
|
|
||||||
DWORD err;
|
DWORD err;
|
||||||
|
int r;
|
||||||
|
int addrsize = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
if (addr->sa_family == AF_INET) {
|
if (addr.sin_family != AF_INET) {
|
||||||
addrsize = sizeof(struct sockaddr_in);
|
|
||||||
} else if (addr->sa_family == AF_INET6) {
|
|
||||||
addrsize = sizeof(struct sockaddr_in6);
|
|
||||||
} else {
|
|
||||||
uv_set_sys_error(WSAEFAULT);
|
uv_set_sys_error(WSAEFAULT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bind(handle->socket, addr, addrsize) == SOCKET_ERROR) {
|
r = bind(handle->socket, (struct sockaddr*) &addr, addrsize);
|
||||||
|
|
||||||
|
if (r == SOCKET_ERROR) {
|
||||||
err = WSAGetLastError();
|
err = WSAGetLastError();
|
||||||
if (err == WSAEADDRINUSE) {
|
if (err == WSAEADDRINUSE) {
|
||||||
/* Some errors are not to be reported until connect() or listen() */
|
/* Some errors are not to be reported until connect() or listen() */
|
||||||
@ -902,8 +901,8 @@ int uv_read_stop(uv_tcp_t* handle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int uv_connect(uv_req_t* req, struct sockaddr* addr) {
|
int uv_connect(uv_req_t* req, struct sockaddr_in addr) {
|
||||||
int addrsize;
|
int addrsize = sizeof(struct sockaddr_in);
|
||||||
BOOL success;
|
BOOL success;
|
||||||
DWORD bytes;
|
DWORD bytes;
|
||||||
uv_tcp_t* handle = (uv_tcp_t*)req->handle;
|
uv_tcp_t* handle = (uv_tcp_t*)req->handle;
|
||||||
@ -915,25 +914,20 @@ int uv_connect(uv_req_t* req, struct sockaddr* addr) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr->sa_family == AF_INET) {
|
if (addr.sin_family != AF_INET) {
|
||||||
addrsize = sizeof(struct sockaddr_in);
|
uv_set_sys_error(WSAEFAULT);
|
||||||
if (!(handle->flags & UV_HANDLE_BOUND) &&
|
|
||||||
uv_bind(handle, (struct sockaddr*)&uv_addr_ip4_any_) < 0)
|
|
||||||
return -1;
|
|
||||||
} else if (addr->sa_family == AF_INET6) {
|
|
||||||
addrsize = sizeof(struct sockaddr_in6);
|
|
||||||
assert(0);
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
assert(0);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(handle->flags & UV_HANDLE_BOUND) &&
|
||||||
|
uv_bind(handle, uv_addr_ip4_any_) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
memset(&req->overlapped, 0, sizeof(req->overlapped));
|
memset(&req->overlapped, 0, sizeof(req->overlapped));
|
||||||
req->type = UV_CONNECT;
|
req->type = UV_CONNECT;
|
||||||
|
|
||||||
success = pConnectEx(handle->socket,
|
success = pConnectEx(handle->socket,
|
||||||
addr,
|
(struct sockaddr*)&addr,
|
||||||
addrsize,
|
addrsize,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
|
|||||||
4
uv.h
4
uv.h
@ -196,9 +196,9 @@ struct uv_tcp_s {
|
|||||||
|
|
||||||
int uv_tcp_init(uv_tcp_t* handle, uv_close_cb close_cb, void* data);
|
int uv_tcp_init(uv_tcp_t* handle, uv_close_cb close_cb, void* data);
|
||||||
|
|
||||||
int uv_bind(uv_tcp_t* handle, struct sockaddr* addr);
|
int uv_bind(uv_tcp_t* handle, struct sockaddr_in);
|
||||||
|
|
||||||
int uv_connect(uv_req_t* req, struct sockaddr* addr);
|
int uv_connect(uv_req_t* req, struct sockaddr_in);
|
||||||
|
|
||||||
int uv_shutdown(uv_req_t* req);
|
int uv_shutdown(uv_req_t* req);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user