diff options
| author | bors <bors@rust-lang.org> | 2013-07-27 01:49:35 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-07-27 01:49:35 -0700 |
| commit | 15310ba7c2a930a26bf6104f336cf7220eec7dc7 (patch) | |
| tree | e85d3a47641c3a9f00364996647626f882501c1b /src/rt | |
| parent | c5194740a78ec113cb6cbc937e7263e2548f62f6 (diff) | |
| parent | df67942dccc33379051e66f075615e579f3bdb49 (diff) | |
| download | rust-15310ba7c2a930a26bf6104f336cf7220eec7dc7.tar.gz rust-15310ba7c2a930a26bf6104f336cf7220eec7dc7.zip | |
auto merge of #8040 : luqmana/rust/rtn, r=brson
Implements various missing tcp & udp methods.. Also fixes handling ipv4-mapped/compatible ipv6 addresses and addresses the XXX on `status_to_maybe_uv_error`. r? @brson
Diffstat (limited to 'src/rt')
| -rw-r--r-- | src/rt/rust_uv.cpp | 66 | ||||
| -rw-r--r-- | src/rt/rustrt.def.in | 10 |
2 files changed, 32 insertions, 44 deletions
diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp index 95e38a9903c..19162b8df6b 100644 --- a/src/rt/rust_uv.cpp +++ b/src/rt/rust_uv.cpp @@ -282,29 +282,19 @@ rust_uv_tcp_bind6 extern "C" int rust_uv_tcp_getpeername -(uv_tcp_t* handle, sockaddr_in* name) { +(uv_tcp_t* handle, sockaddr_storage* name) { + // sockaddr_storage is big enough to hold either + // sockaddr_in or sockaddr_in6 int namelen = sizeof(sockaddr_in); return uv_tcp_getpeername(handle, (sockaddr*)name, &namelen); } extern "C" int -rust_uv_tcp_getpeername6 -(uv_tcp_t* handle, sockaddr_in6* name) { - int namelen = sizeof(sockaddr_in6); - return uv_tcp_getpeername(handle, (sockaddr*)name, &namelen); -} - -extern "C" int rust_uv_tcp_getsockname -(uv_tcp_t* handle, sockaddr_in* name) { - int namelen = sizeof(sockaddr_in); - return uv_tcp_getsockname(handle, (sockaddr*)name, &namelen); -} - -extern "C" int -rust_uv_tcp_getsockname6 -(uv_tcp_t* handle, sockaddr_in6* name) { - int namelen = sizeof(sockaddr_in6); +(uv_tcp_t* handle, sockaddr_storage* name) { + // sockaddr_storage is big enough to hold either + // sockaddr_in or sockaddr_in6 + int namelen = sizeof(sockaddr_storage); return uv_tcp_getsockname(handle, (sockaddr*)name, &namelen); } @@ -370,15 +360,10 @@ rust_uv_get_udp_handle_from_send_req(uv_udp_send_t* send_req) { extern "C" int rust_uv_udp_getsockname -(uv_udp_t* handle, sockaddr_in* name) { - int namelen = sizeof(sockaddr_in); - return uv_udp_getsockname(handle, (sockaddr*)name, &namelen); -} - -extern "C" int -rust_uv_udp_getsockname6 -(uv_udp_t* handle, sockaddr_in6* name) { - int namelen = sizeof(sockaddr_in6); +(uv_udp_t* handle, sockaddr_storage* name) { + // sockaddr_storage is big enough to hold either + // sockaddr_in or sockaddr_in6 + int namelen = sizeof(sockaddr_storage); return uv_udp_getsockname(handle, (sockaddr*)name, &namelen); } @@ -401,6 +386,12 @@ rust_uv_udp_set_multicast_ttl } extern "C" int +rust_uv_udp_set_ttl +(uv_udp_t* handle, int ttl) { + return uv_udp_set_ttl(handle, ttl); +} + +extern "C" int rust_uv_udp_set_broadcast (uv_udp_t* handle, int on) { return uv_udp_set_broadcast(handle, on); @@ -609,6 +600,17 @@ rust_uv_ip6_addrp(const char* ip, int port) { return addrp; } +extern "C" struct sockaddr_storage * +rust_uv_malloc_sockaddr_storage() { + struct sockaddr_storage *ss = (sockaddr_storage *)malloc(sizeof(struct sockaddr_storage)); + return ss; +} + +extern "C" void +rust_uv_free_sockaddr_storage(struct sockaddr_storage *ss) { + free(ss); +} + extern "C" void rust_uv_free_ip4_addr(sockaddr_in *addrp) { free(addrp); @@ -669,18 +671,6 @@ rust_uv_is_ipv6_sockaddr(sockaddr* addr) { return addr->sa_family == AF_INET6; } -extern "C" sockaddr_in* -rust_uv_sockaddr_as_sockaddr_in(sockaddr* addr) { -// return (sockaddr_in*)addr->sa_data; - return (sockaddr_in*)addr; -} - -extern "C" sockaddr_in6* -rust_uv_sockaddr_as_sockaddr_in6(sockaddr* addr) { - //return (sockaddr_in6*)addr->sa_data; - return (sockaddr_in6*)addr; -} - extern "C" bool rust_uv_is_ipv4_addrinfo(addrinfo* input) { return input->ai_family == AF_INET; diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index db9fe247952..fc7796ef66c 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -106,7 +106,6 @@ rust_uv_tcp_bind rust_uv_tcp_connect6 rust_uv_tcp_bind6 rust_uv_tcp_getsockname -rust_uv_tcp_getsockname6 rust_uv_tcp_nodelay rust_uv_tcp_keepalive rust_uv_tcp_simultaneous_accepts @@ -119,15 +118,15 @@ rust_uv_udp_recv_start rust_uv_udp_recv_stop rust_uv_get_udp_handle_from_send_req rust_uv_udp_getsockname -rust_uv_udp_getsockname6 rust_uv_udp_set_membership rust_uv_udp_set_multicast_loop rust_uv_udp_set_multicast_ttl +rust_uv_udp_set_ttl rust_uv_udp_set_broadcast rust_uv_is_ipv4_sockaddr rust_uv_is_ipv6_sockaddr -rust_uv_sockaddr_as_sockaddr_in -rust_uv_sockaddr_as_sockaddr_in6 +rust_uv_malloc_sockaddr_storage +rust_uv_free_sockaddr_storage rust_uv_listen rust_uv_accept rust_uv_write @@ -204,7 +203,6 @@ rust_update_gc_metadata rust_uv_ip4_port rust_uv_ip6_port rust_uv_tcp_getpeername -rust_uv_tcp_getpeername6 linenoise linenoiseSetCompletionCallback linenoiseAddCompletion @@ -267,4 +265,4 @@ rust_drop_global_args_lock rust_set_exit_status_newrt rust_get_exit_status_newrt rust_take_change_dir_lock -rust_drop_change_dir_lock \ No newline at end of file +rust_drop_change_dir_lock |
