Using DNS Service Discovery in Windows
DNS Service Discovery was written with cross-platform compatibility in mind. Therefore, all of the DNS Service Discovery API calls that are valid in OS X and iOS are also valid in Windows. The difference between the two platforms lies in how each handles run loops. The next two sections will explain what changes need to be made to write programs that take advantage of DNS Service Discovery in Windows. Before reading these sections, you’ll want to become familiar with the DNS Service Discovery API and Microsoft Foundation classes, if you are not already.
Windows Graphical User Interfaces
To properly incorporate DNS Service Discovery in a Windows graphical user interface, use the WinSock WSAAsyncSelect
function. The WSAAsyncSelect
function integrates socket-based network events into the Windows message loop. To use this in your Windows code, you should first create and initialize a DNSServiceRef
object. Then, call the function WSAAsyncSelect
to associate your DNSServiceRef
object’s socket with the Windows message loop. WSAAsyncSelect
requires four arguments: a socket to your DNSServiceRef
object, a window to receive the message, a message to be sent when the event occurs, and a bitmask for the network events you are interested in. A simple example of this is provided below. In the example, you can see how to create a NULL
DNSServiceRef
object, initialize that reference with DNSServiceBrowse
, and then add it to the work loop with WSAAsyncSelect
.
// create blank DNSServiceRef |
e = new ServiceHandlerEntry; |
... |
// initialize the DNSServiceRef for browsing |
err = DNSServiceBrowse( &e->ref, 0, 0, e->type, NULL, BrowseCallBack, e ); |
// add browsing to the work loop with WSAAsyncSelect |
// where m_hWnd is the window, WM_PRIVATE_SERVICE_EVENT is the message and |
// FD_READ and FD_CLOSE are bitmasks for reading and closing sockets |
err = WSAAsyncSelect((SOCKET) DNSServiceRefSockFD(e->ref), |
m_hWnd, |
WM_PRIVATE_SERVICE_EVENT, |
FD_READ|FD_CLOSE); |
Windows Command-Line Interfaces
Creating a Windows command-line program using DNS Service Discovery is similar to creating one for OS X or iOS. Windows, like OS X and iOS, has support for the select
system call. This function is used to determine when results are available from the DNS Service Discovery API functions. More information about using the select
loop with DNS Service Discovery is available in Registering and Terminating a Service, Browsing for Network Services, and Resolving the Current Address of a Service.
Copyright © 2013 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2013-08-08