Hello,
I've been encountering some challenges while working with NWConnectionGroup and NWMulticastGroup for multicast operations on iOS. I have a few doubts and issues that I would like to address:
1. NWMulticastGroup Initialization
It seems that when initializing NWMulticastGroup, only one NWEndpoint can be passed, and attempting to pass multiple endpoints results in failure. Can someone confirm if this behavior is correct?
2. Interface Level Control
Upon initializing NWConnectionGroup, it appears that packets are received on all interfaces without the ability to control this at the interface level. Is this correct? If not is there a way to configure NWConnectionGroup to receive packets on all interfaces?
3. Sending Behavior
During the send operation, it appears that the data is sent through any one of the available interfaces, and there doesn't seem to be an option to configure it to send through all available endpoints. Is there a way to enable sending data through all available endpoints?
Any insights, guidance, or solutions to these issues would be greatly appreciated. Has anyone else encountered similar problems or found workarounds for these limitations?
Thank you for your assistance and support.
Thanks,
Harshal
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi everyone,
I’m working on an app where I need to separate IPv4 and IPv6 traffic on a specific port, let's say "X", using the Network Framework. However, I’ve run into a problem: it appears that I'm only able to open a single NWListener for a given port number. I was under the impression that I should be able to create distinct IPv4 and IPv6 listeners for the same port "X".
Here’s the sample code I’ve written:
var params: NWParameters
var l1: NWListener
var l2: NWListener
params = NWParameters.udp
let protocolOptions = params.defaultProtocolStack.internetProtocol! as NWProtocolOptions
let ipOptions = protocolOptions as! NWProtocolIP.Options
ipOptions.version = .v6
l1 = try NWListener(using: params, on: NWEndpoint.Port(rawValue: 54192)!)
l1.stateUpdateHandler = InternalListenerStateHandler
l1.newConnectionHandler = InternalNewConnectionHandler
l1.start(queue: .global())
ipOptions.version = .v4
l2 = try NWListener(using: params, on: NWEndpoint.Port(rawValue: 54192)!)
l2.stateUpdateHandler = InternalListenerStateHandler
l2.newConnectionHandler = InternalNewConnectionHandler
l2.start(queue: .global())
I’m trying to figure out why this approach isn’t working. Is there a way to manage both IPv4 and IPv6 traffic on the same port using the Network Framework, or is there something I’m overlooking in my setup?
Additionally, when I switch to the BSD framework, I can successfully open two sockets on the same port by setting the "IPV6_ONLY" property on the IPv6 socket.
Any insights or advice would be greatly appreciated!
Thanks,
Harshal
Hello everyone,
We have a use case where we need to disable the sending and receiving of fragmented packets on the network while using NWConnection.
However, even after setting the disableFragmentation flag to true, the connection still sends fragmented packets.We’ve tried setting the flag as follows, but the packets are still being fragmented:
var connection : NWConnection
var udp_options : NWProtocolUDP.Optionsudp_options = NWProtocolUDP.Options()
var connection_parameters = NWParameters(dtls: nil, udp: udp_options)
let ip_options = connection_parameters.defaultProtocolStack.internetProtocol! as! NWProtocolIP.Options
ip_options.disableFragmentation = true
connection = NWConnection (host: "XX.XX.XX.***", port: NWEndpoint.Port(25000), using: connection_parameters)
The issue we are encountering is that even though we’ve set disableFragmentation to true on the sender, the receiver still receives fragmented UDP packets. This can be observed using Wireshark, where we are sending a 10k byte data from the sender and receiving the fragmented datagram packets on the receiver end while both the devices are on the same WiFi network. Additionally, Wireshark shows that the packet has the "DF" bit set to '0', indicating that fragmentation is allowed.
What is exactly expected from the disableFragmentation flag? Are we misunderstanding how this flag works? Or is there something else we should be doing to ensure that fragmentation is completely disabled?
Looking forward to your insights!
Hello Everyone,
I'm currently working on a cross-platform application that uses IP-based multicast for device discovery across both Apple and non-Apple devices running the same app. All devices join a multicast group "X.X.X.X" on port Y.
For Apple devices, I am using NWConnectionGroup for multicast discovery, while for non-Apple devices, I am using BSD sockets.
The issue arises when I attempt to send a multicast message to the group using NWConnectionGroup. The message is sent from a separate ephemeral port rather than the multicast port Y. As a result, all Apple processes that are using NWConnectionGroup can successfully receive the multicast message. However, the processes running on the non-Apple devices (using BSD sockets) do not receive the message.
My Questions:
Is there a way to configure NWConnectionGroup to send multicast messages from the same multicast port Y rather than an ephemeral port?
Is there any known behavior or limitation in how NWConnectionGroup handles multicast that could explain why non-Apple devices using BSD sockets cannot receive the message?
How can I ensure cross-platform multicast compatibility between Apple devices using NWConnectionGroup and non-Apple devices using BSD sockets?
Any guidance or suggestions would be greatly appreciated!
Thanks,
Harshal