Recently I've been working on fixing bugs in an Android app, where one of its main functions is to find network-connected printers and print to them. It was originally using the JmDNS library to do the network discovery of printers: https://github.com/jmdns/jmdns
I've been working on this app for the past few weeks, and suddenly this past Monday, a weird issue started happing - The JmDNS library started to only give an ipv6 network address for our test printer (previously, it had been giving an ipv4 address), and it seemed the ipv6 address it was giving was incorrect, as the app couldn't ping and couldn't otherwise connect to the printer with that address.
I found that Google added a network service discovery API to the Android SDK starting with SDK version 16: https://developer.android.com/training/connect-devices-wirelessly/nsd
I updated the Android app to use the Android network service discovery API instead of JmDNS, and I found the Android network service discovery returns the correct network address for the printer (and is getting its ipv4 address). Now the app can connect and print to the printer again.
I'm curious if anyone here has worked with network service discovery and has seen anything weird like the issue I was having?
The office where I work did have a power outage last weekend, and I wonder if that may have affected anything on our network to cause the issue I was seeinig. But it seems like it was purely a software issue, so I don't really know why I started seeing that issue.
Also, I feel like the official Android network service discovery API would probably be better to use than a 3rd-party library, but JmDNS is still in development (the latest version is from August 2021), so I imagine there may be advantages of using it. I'm wondering why choose something like JmDNS over the Android network service discovery API?
The underlying system function is probably getaddrinfo (https://linux.die.net/man/3/getaddrinfo) which provides the caller control over the inclusion/exclusion of address families (e.g. IPv4 or IPv6). I'm not familiar with JmDNS or the Android network service discovery API, but look for similar control over the address "families" that may be returned by such discovery functions.
Re: Android JmDNS vs. Android Network Service Discovery
By: Digital Man to Nightfox on Thu Jun 09 2022 10:57 am
The underlying system function is probably getaddrinfo (https://linux.die.net/man/3/getaddrinfo) which provides the caller control over the inclusion/exclusion of address families (e.g. IPv4 or IPv6). I'm not familiar with JmDNS or the Android network service discovery API, but look for similar control over the address "families" that may be returned by such discovery functions.
I suspected there may be some underlying function to control which type of network addresses are returned. When using the JmDNS library, there was nothing specifying to use either ipv4 or ipv6 addresses (and it was getting an ipv4 address previously). I hadn't changed anything in the app to specify which type of address to receive though; for some reason it seemed to change on its own. It had started working again with the JmDNS library, but when I ran through some specific steps, it triggered something to only get an ipv6 address (no change in the code).
I suspected there may be some underlying function to control which
type of network addresses are returned. When using the JmDNS library,
there was nothing specifying to use either ipv4 or ipv6 addresses (and
it was getting an ipv4 address previously). I hadn't changed anything
in the app to specify which type of address to receive though; for
some reason it seemed to change on its own. It had started working
again with the JmDNS library, but when I ran through some specific
steps, it triggered something to only get an ipv6 address (no change
in the code).
Could the change just simply be on the DNS records for the address your resolving? Are you seeing this same change in behavior for all addresses being resolved or just some?
Could the change just simply be on the DNS records for the address
your resolving? Are you seeing this same change in behavior for all
addresses being resolved or just some?
I'd only been testing it with the one printer (which was the only printer that was coming up), so I'm not really sure.
Re: Android JmDNS vs. Android Network Service Discovery
By: Nightfox to Digital Man on Thu Jun 09 2022 02:59 pm
Could the change just simply be on the DNS records for the address
your resolving? Are you seeing this same change in behavior for all
addresses being resolved or just some?
I'd only been testing it with the one printer (which was the only printer that was coming up), so I'm not really sure.
Other apps on the device were able to get the correct (and ipv4) address of the printer, which made me think it may have been something going on with the jmDNS library.
Sysop: | MarisaG |
---|---|
Location: | South San Francisco, CA |
Users: | 82 |
Nodes: | 15 (0 / 15) |
Uptime: | 213:15:57 |
Calls: | 1,435 |
Files: | 7 |
Messages: | 22,000 |