mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-09 15:26:04 +00:00
Fix UDP failing on windows
This commit is contained in:
parent
317499edae
commit
87e455f59b
@ -439,14 +439,25 @@ u_short zmq::select_t::get_fd_family (fd_t fd_)
|
|||||||
sockaddr_storage addr = { 0 };
|
sockaddr_storage addr = { 0 };
|
||||||
int addr_size = sizeof addr;
|
int addr_size = sizeof addr;
|
||||||
|
|
||||||
int rc = getsockname (fd_, (sockaddr *)&addr, &addr_size);
|
int type;
|
||||||
|
int type_length = sizeof(int);
|
||||||
|
|
||||||
|
int rc = getsockopt(fd_, SOL_SOCKET, SO_TYPE, (char*) &type, &type_length);
|
||||||
|
|
||||||
// AF_INET and AF_INET6 can be mixed in select
|
if (rc == 0) {
|
||||||
// TODO: If proven otherwise, should simply return addr.sa_family
|
if (type == SOCK_DGRAM)
|
||||||
if (rc != SOCKET_ERROR)
|
return AF_INET;
|
||||||
return addr.ss_family == AF_INET6 ? AF_INET : addr.ss_family;
|
else {
|
||||||
else
|
rc = getsockname(fd_, (sockaddr *)&addr, &addr_size);
|
||||||
return AF_UNSPEC;
|
|
||||||
|
// AF_INET and AF_INET6 can be mixed in select
|
||||||
|
// TODO: If proven otherwise, should simply return addr.sa_family
|
||||||
|
if (rc != SOCKET_ERROR)
|
||||||
|
return addr.ss_family == AF_INET6 ? AF_INET : addr.ss_family;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return AF_UNSPEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
zmq::select_t::family_entry_t::family_entry_t () :
|
zmq::select_t::family_entry_t::family_entry_t () :
|
||||||
|
Loading…
x
Reference in New Issue
Block a user