Hi

I need to interface to dns_sd.h from libuv 
(https://opensource.apple.com/tarballs/mDNSResponder/) across platforms 
(Linux, OSX, Windows).

dns_sd.h returns a file handle (int fd) which I need to poll to get updates 
from the dns_sd server. This works fine on Linux/OSX, but not so on Windows.
dns_sd.h apparently returns a file handle to a TCP socket (to localhost) on 
Windows and a Unix socket on Linux/OSX.

Here (http://docs.libuv.org/en/v1.x/poll.html) I read:
Note On windows only sockets can be polled with poll handles. On Unix any 
file descriptor that would be accepted by poll(2) can be used.

I have attached a minimal program which should show the issue:
According to the docs the program should succeed as the file handle on 
Windows refers to a TCP socket, but it triggers a ENOTSOCK error.
Likewise, the uv_guess_handle returns UV_UNKNOWN_HANDLE.

Do I misread the docs, or why is this not working?
I cross compile both libuv and libdns_sd from Linux, if it should matter...


test.c
--------------------------------------
#include <uv.h>
#include <stdio.h>

#if defined(_WIN32)
# define AF_MDNS AF_INET
#else
# define AF_MDNS AF_LOCAL
#endif

int
main(int argc, char **argv)
{
uv_loop_t *loop = uv_default_loop();

printf("AF: %i\n", AF_MDNS);
int fd = socket(AF_MDNS, SOCK_STREAM, 0);
printf("fd: %i %i\n", fd, uv_guess_handle(fd));

uv_poll_t poller;

int err;
if((err = uv_poll_init(loop, &poller, fd)))
fprintf(stderr, "uv_poll_init: %s\n", uv_strerror(err));

return 0;
}

Makefile
-----------------------------
all: test test.exe

test: test.c
gcc -o $@ $< -I/usr/include -L/usr/lib -luv

test.exe: test.c
x86_64-w64-mingw32-gcc -static -static-libgcc -o $@ $< 
-I/usr/x86_64-w64-mingw32/include -L/usr/x86_64-w64-mingw32/lib -luv 
-lws2_32 -lpsapi -liphlpapi


Output Linux/OSX (x86_64)
---------------------------------------
AF: 1
fd: 9 7

Output Windows 7 (x86_64)
----------------------------------------
AF: 2
fd: 80 0
uv_poll_init: socket operation on non-socket

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to