43 #if defined(ADDRESS_SORTING_WINDOWS)
50 #include <sys/types.h>
52 static bool windows_source_addr_factory_get_source_addr(
56 bool source_addr_exists =
false;
59 if (s != INVALID_SOCKET) {
60 if (connect(s, (
struct sockaddr*)dest_addr, (
int)dest_addr->len) == 0) {
62 memset(&found_source_addr, 0,
sizeof(found_source_addr));
63 found_source_addr.
len =
sizeof(found_source_addr.
addr);
64 if (getsockname(s, (
struct sockaddr*)&found_source_addr.
addr,
65 (socklen_t*)&found_source_addr.
len) == 0) {
66 source_addr_exists =
true;
67 *source_addr = found_source_addr;
72 return source_addr_exists;
75 static void windows_source_addr_factory_destroy(
81 windows_source_addr_factory_vtable = {
82 windows_source_addr_factory_get_source_addr,
83 windows_source_addr_factory_destroy,
91 factory->
vtable = &windows_source_addr_factory_vtable;
95 #endif // defined(ADDRESS_SORTING_WINDOWS)