On Thu, Aug 16, 2012 at 2:04 PM, Jeff Garzik <jgarzik@exmulti.com> wrote:
On Thu, Aug 16, 2012 at 1:56 PM, Pieter Wuille <pieter.wuille@gmail.com> wrote:
> I suppose it is interesting in general for nodes to
> get a memory pool refill at startup anyway.

Yes.

>>    An "inv" message is always returned, even if empty.
>
> I'm not sure about this last. What is it good for? inv packets can always be
> sent, even not in response to others, so it is not that this gives you an
> acknowledgement the mempool is updated?

A simple guarantee of 1:1 correspondence between request and response.
 The bitcoin protocol sometimes simply elides a response when the
response would be empty, and this makes it difficult to know whether a
request is timing out or already processed.

Sending a ping(nonce) after each P2P command is another way of achieving same :)



Is there a problem with sending unrecognized messages to nodes?   If we create a new message type specifically asking for memory pool transactions, and we broadcast it to all nodes that we are connected to, and none of them respond, then either there are no tx in their memory pools, or they don't recognize the message and ignore it.  Either way, you're not going to get any extra information out of them.  If you really care, a simple ping can identify whether they're still connected and should've responded (as Jeff said).

As long as the older node won't cut you off for sending one unrecognized request, it seems that you can get by fine without requiring that bit.  I guess it depends on the utility of definitively identifying whether a node supports the functionality.  I personally don't feel like it's critical, especially considering that this is most useful only during the transient period when it's not normal for nodes to support it yet.