So apparently I needed to create a UDP socket independent of any client, bind it to the local interface (using bind()) and then set a client to use that socket.
I haven't figured out how to actually do the last bit though (i.e. set a client to use an already created socket) as I was working from a C# example which used syntax that obv wasn't valid in my vb to do this.