[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: UDP: Send and receive on same port?
From: |
Robert Pluim |
Subject: |
Re: UDP: Send and receive on same port? |
Date: |
Wed, 31 Mar 2021 11:14:11 +0200 |
>>>>> On Tue, 30 Mar 2021 23:03:58 +0200, Mario Lang <mlang@blind.guru> said:
Mario> Robert Pluim <rpluim@gmail.com> writes:
>>>>>>> On Tue, 30 Mar 2021 13:11:47 +0200, Mario Lang <mlang@blind.guru>
said:
>>
Mario> Replying to self
Mario> Nevermind, it works by creating a datagram server first, and then
using
Mario> set-process-datagram-address to set the destination. The server
process
Mario> can now be used to send UDP as well. However, I am seeing lost
incoming
Mario> packets. According to tcpdump, the reply is clearly there, but the
Mario> process filter only seems to pick it up 1 out of roughly 4 times.
Mario> Weird.
>>
>> Hmm, I have a patch somewhere to allow setting the sending port
>> directly, Iʼll see if I can find it and resurrect it.
Mario> OK. However, we'd also need a way to get the listening port of a
server
Mario> process with :service t. At least I haven't seen a way to query the
Mario> listening port yet.
(aref (process-contact server :local) 4)
>> Having said that, this sounds like it might be a bug (although I
>> haven't checked if the emacs code supports sending from a datagram
>> server like this).
Mario> It does works, and also flawlessly. The weirdness I saw was due to a
Mario> coding-system issue, `osc-make-server` did not set :coding 'binary,
Mario> which is now fixed.
>> Could you open a bug with M-x report-emacs-bug with your emacs
>> version, and sample code?
Mario> I'd rather not, since this behaviour is actually wanted.
Mario> It is the only way I have to communicate with a certain external
program
Mario> directly from elisp. scsynth always replies to the sender port...
No need, since it appears thereʼs no bug :-)
Mario> To reproduce, all you need is create a datagram server, and set the
Mario> datagram-address to the desired destination. You can now receive
Mario> datagrams, and also use process-send-string to send to the desired
Mario> destination.
Based on my (vague) recollection, for a server process you should be
able to pass in :service <port> anyway, so then thereʼs no need to
query for the port.
Robert
--