I am trying to create a Bonjour service in my iOS application, but cannot publish it. Only the netServiceWillPublish
delegate method is ever called and the service is not displayed using dns-sd.
Here is my code:
var service: NetService? = nil func start() { createSockets() service = NetService(domain: "test", type: "_test._tcp.", name: "Test", port: Int32(port)) service?.delegate = self service?.startMonitoring() service?.publish() service?.setTXTRecord(NetService.data(fromTXTRecord: [ "model": "AppleTV3,2,1".data(using: .utf8)!, "srcvers": "160.10".data(using: .utf8)!, "features": "0x100009FF".data(using: .utf8)!, "deviceId": "b8:53:ac:43:f3:15".data(using: .utf8)!, "pw": "0".data(using: .utf8)!, "rmodel": "MacBookPro10,2".data(using: .utf8)! ])) } private func createSockets() { ipv4Socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAutomaticallyReenableAcceptCallBack, socketCallback, nil) var sin = sockaddr_in() memset(&sin, 0, MemoryLayout<sockaddr_in>.size) sin.sin_len = __uint8_t(MemoryLayout<sockaddr_in>.size) sin.sin_family = sa_family_t(AF_INET); sin.sin_port = in_port_t(port) sin.sin_addr.s_addr = INADDR_ANY let sincfd = withUnsafePointer(to: &sin) { $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout<sockaddr_in>.size) { return CFDataCreate(kCFAllocatorDefault, $0, MemoryLayout<sockaddr_in>.size) } } CFSocketSetAddress(ipv4Socket, sincfd) let socketsource = CFSocketCreateRunLoopSource( kCFAllocatorDefault, ipv4Socket, 0); CFRunLoopAddSource( CFRunLoopGetCurrent(), socketsource, CFRunLoopMode.defaultMode); }
I'm new to this type of network in iOS, what am I doing wrong here?
source share