| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 2335bcd commit f44f335
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -175,6 +175,19 @@ void UDPWrap::GetFD(const FunctionCallbackInfo<Value>& args) { | |||
| 175 | 175 | args.GetReturnValue().Set(fd); | |
| 176 | 176 | } | |
| 177 | 177 | ||
| 178 | + int sockaddr_for_family(int address_family, | ||
| 179 | + const char* address, | ||
| 180 | + const unsigned short port, | ||
| 181 | + struct sockaddr_storage* addr) { | ||
| 182 | + switch (address_family) { | ||
| 183 | + case AF_INET: | ||
| 184 | + return uv_ip4_addr(address, port, reinterpret_cast<sockaddr_in*>(addr)); | ||
| 185 | + case AF_INET6: | ||
| 186 | + return uv_ip6_addr(address, port, reinterpret_cast<sockaddr_in6*>(addr)); | ||
| 187 | + default: | ||
| 188 | + CHECK(0 && "unexpected address family"); | ||
| 189 | + } | ||
| 190 | + } | ||
| 178 | 191 | ||
| 179 | 192 | void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) { | |
| 180 | 193 | UDPWrap* wrap; | |
@@ -191,24 +204,11 @@ void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) { | |||
| 191 | 204 | if (!args[1]->Uint32Value(ctx).To(&port) || | |
| 192 | 205 | !args[2]->Uint32Value(ctx).To(&flags)) | |
| 193 | 206 | return; | |
| 194 | - char addr[sizeof(sockaddr_in6)]; | ||
| 195 | - int err; | ||
| 196 | - | ||
| 197 | - switch (family) { | ||
| 198 | - case AF_INET: | ||
| 199 | - err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr)); | ||
| 200 | - break; | ||
| 201 | - case AF_INET6: | ||
| 202 | - err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr)); | ||
| 203 | - break; | ||
| 204 | - default: | ||
| 205 | - CHECK(0 && "unexpected address family"); | ||
| 206 | - ABORT(); | ||
| 207 | - } | ||
| 208 | - | ||
| 207 | + struct sockaddr_storage addr_storage; | ||
| 208 | + int err = sockaddr_for_family(family, address.out(), port, &addr_storage); | ||
| 209 | 209 | if (err == 0) { | |
| 210 | 210 | err = uv_udp_bind(&wrap->handle_, | |
| 211 | - reinterpret_cast<const sockaddr*>(&addr), | ||
| 211 | + reinterpret_cast<const sockaddr*>(&addr_storage), | ||
| 212 | 212 | flags); | |
| 213 | 213 | } | |
| 214 | 214 | ||
@@ -392,27 +392,14 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) { | |||
| 392 | 392 | ||
| 393 | 393 | req_wrap->msg_size = msg_size; | |
| 394 | 394 | ||
| 395 | - char addr[sizeof(sockaddr_in6)]; | ||
| 396 | - int err; | ||
| 397 | - | ||
| 398 | - switch (family) { | ||
| 399 | - case AF_INET: | ||
| 400 | - err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr)); | ||
| 401 | - break; | ||
| 402 | - case AF_INET6: | ||
| 403 | - err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr)); | ||
| 404 | - break; | ||
| 405 | - default: | ||
| 406 | - CHECK(0 && "unexpected address family"); | ||
| 407 | - ABORT(); | ||
| 408 | - } | ||
| 409 | - | ||
| 395 | + struct sockaddr_storage addr_storage; | ||
| 396 | + int err = sockaddr_for_family(family, address.out(), port, &addr_storage); | ||
| 410 | 397 | if (err == 0) { | |
| 411 | 398 | err = req_wrap->Dispatch(uv_udp_send, | |
| 412 | 399 | &wrap->handle_, | |
| 413 | 400 | *bufs, | |
| 414 | 401 | count, | |
| 415 | - reinterpret_cast<const sockaddr*>(&addr), | ||
| 402 | + reinterpret_cast<const sockaddr*>(&addr_storage), | ||
| 416 | 403 | OnSend); | |
| 417 | 404 | } | |
| 418 | 405 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments