mirror of
https://github.com/owntone/owntone-server.git
synced 2025-02-05 02:38:09 -05:00
Merge pull request #1660 from X-Ryl669/fixSelect
Fix select issue on FreeBSD.
This commit is contained in:
commit
c34acb16c2
@ -36,6 +36,7 @@
|
||||
#include <net/if.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <poll.h>
|
||||
|
||||
#include <event2/event.h>
|
||||
|
||||
@ -582,8 +583,7 @@ connection_test(int family, const char *address, const char *address_log, int po
|
||||
struct addrinfo *ai;
|
||||
char strport[32];
|
||||
int sock;
|
||||
fd_set fdset;
|
||||
struct timeval timeout = { MDNS_CONNECT_TEST_TIMEOUT, 0 };
|
||||
struct pollfd fd;
|
||||
socklen_t len;
|
||||
int flags;
|
||||
int error;
|
||||
@ -639,10 +639,11 @@ connection_test(int family, const char *address, const char *address_log, int po
|
||||
// the case, but FreeBSD connect() sometimes returns immediate success.
|
||||
if (ret != 0)
|
||||
{
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(sock, &fdset);
|
||||
|
||||
ret = select(sock + 1, NULL, &fdset, NULL, &timeout);
|
||||
// Use poll here since select requires using fdset that would be overflowed in FreeBSD
|
||||
fd.fd = sock;
|
||||
fd.events = POLLOUT;
|
||||
|
||||
ret = poll(&fd, 1, MDNS_CONNECT_TEST_TIMEOUT * 1000);
|
||||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_WARN, L_MDNS, "Connection test to %s:%d failed with select error: %s\n", address_log, port, strerror(errno));
|
||||
|
Loading…
x
Reference in New Issue
Block a user