I had meant the source IP address, not the source port. Anyway, I've added the patch which does a search for the unicast socket. I've made this change a Darwin-only change for two reasons: 1) things work correctly the way they are now on Linux. 2) Linux is more selective about data sent to a socket bound to a network interface -- just picking the first unicast socket caused the wrong source IP address to be in the packet.
--Nick On Thu, Aug 12, 2010 at 4:32 PM, Roel van de Kraats <r...@advancedcargo.eu>wrote: > Hi Nick, > > > On 08/12/2010 12:42 AM, Nick Wagner wrote: > >> I agree that it's not ideal for the multicast-bound socket to be used for >> unicast. For one thing, on some platforms the binding address affects the >> source address, which can be confusing for someone trying to respond (or >> sniff). >> > But since that's how slp was designed (using the same port for both unicast > and multicast access, instead of e.g. publishing the unicast port to use > through an advert) this is what we'll have to live with. > > After looking more closely at the situation you described, it also makes > sense to reply from the same port as on which the incoming (unicast?) > datagram was received. Isn't that how e.g. firewalls determine whether data > is allowed to pass? But if this mechanism doesn't work always, it is indeed > perhaps better to pick another port as you suggested. Any experts on this? > > >> So, now's our opportunity for fixing the problem. The >> socket()/sendto()/close() method seems the simplest, but if possible I'd >> prefer a more elegant solution using sockets we've already bound. I could >> walk the G_IncomingSocketList to find the first socket that has >> can_send_mcast set to true -- that is only set on the unicast UDP socket, >> marking it for use for multicast sending in slpd_knownda.c >> > If you think this is faster than simply creating a new socket, that's > probably the best solution. > > Roel > >> >> --Nick >> >> Hi Nick, >> >> In my opinion, a socket bound to a multicast address (c.q. the >> standard slp port) should never be used for sending data, since a >> reply (as in a 'private conversation') will need to be sent to >> that 'public' socket. Not only is this somewhat unpretty, it also >> gives problems when other processes bind to the same multicast >> address/port as well. It is uncertain who will receive the reply >> then. But since SLP defines that unicasts can be sent to the >> standard multicast port, multiple processes binding won't work >> properly anyway. >> >> Please correct me if I'm wrong here; this is just my idea of how >> things work (after a lot of testing). >> >> BR, >> Roel >> >> >> >> --Nick >> >> >> >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by >> >> Make an app they can't live without >> Enter the BlackBerry Developer Challenge >> http://p.sf.net/sfu/RIM-dev2dev >> >> >> _______________________________________________ >> Openslp-devel mailing list >> Openslp-devel@lists.sourceforge.net >> <mailto:Openslp-devel@lists.sourceforge.net> >> >> https://lists.sourceforge.net/lists/listinfo/openslp-devel >> >> >> >> >
------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev
_______________________________________________ Openslp-devel mailing list Openslp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openslp-devel