ちょっと修正
・自分がキャッシュを保持しているキーは各ノード addr=127.0.0.1, port=自port として保持しておく。
・キー交換時に自分が firewalled かどうかも相手に教える。
・B(nodeB)からキー(key)が入ってきたとき、
if (key.addr == 127.0.0.1) {
key.addr = nodeB.addr;
// port そのまま
key.firewalled = nodeB.firewalled;
} else {
// addr, port そのまま
key.firewalled = false;
}
keys.insert(key);
・B(nodeB)にキー(key)を投げるとき、
if (key.addr != nodeB.addr) {
Key tmp = key;
if (tmp.firewalled || rand() % 100 == 0) {
tmp.addr = 127.0.0.1;
tmp.port = myPort;
}
sendkey(tmp);
} else {
// 投げない
}