So I changed it to use sendto and it works a lot better. It receives from multiple clients while sending to any one. I added a [to ( message to set the destination, and removed the [connect( and [disconnect{ methods. Thanks Christof for the critique!.
Martin
On Mon, Jun 7, 2021 at 4:02 PM Christof Ressi info@christofressi.com wrote:
The only problem I see with it is that while the socket is connected for a send, it won't receive anything.
Why is that? This shouldn't happen.
BTW, you don't actually have to call connect(), instead you could just save the sockaddr and use sendto(). Consequently you could also rename the [connect( method to something else, e.g. [set <host> <port>( or [client <host> <port>(, etc. After all, a server doesn't *connect* to a client...
Christof
On 07.06.2021 21:34, Martin Peach wrote:
OK, I have implemented something that might work: [udpsrvr] can listen on a port and send to an address using the same or a different port. The only problem I see with it is that while the socket is connected for a send, it won't receive anything. I overcome this partly by sending the connect/send/disconnect sequence in one comma-delimited message. The code is at https://sourceforge.net/p/pure-data/svn/HEAD/tree/trunk/externals/mrpeach/ne...
Martin
On Mon, Jun 7, 2021 at 3:48 AM Roman Haefeli reduzent@gmail.com wrote:
On Sun, 2021-06-06 at 20:26 -0400, Martin Peach wrote:
If you have a [udpreceive 9898] as your 'server' it will receive from anywhere on port 9898. So you can take the sender's ip and port from the latest incoming message (route 'from' at the second outlet) and use them to set the address and port of a single [udpsend] for the reply. There is no connection in udp so you need to add metadata in your datagrams for routing and so forth.
Again, this does not work. The socket on the client side will only accept packets originating from the port it has sent packets to, but [udpsend] on the server cannot use this port as bind port, because it is already occupied by [udpreceive]. To put this into telephone analogy: When you call someone, you expect a third party to be prohibited from shouting into your call, and you expect to hear only the party you called.
The only solution to this is to use the same socket for both sending and receiving, as Christof already suggested.
Roman _______________________________________________ Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list