Right now the two receiving devices are PCs, although the receivers ultimately will include Raspberry Pis & other Arduinos.
I couldn't tell much from just printing characters, so I added timers after every event. Here's what it looks like sending to just one IP:
begin loop: 0
after msg: 0
after beginPacket1: 1
after send1: 2
after endPacket1: 1
after msg.empty: 1
begin loop: 1
after msg: 1
after beginPacket1: 1
after send1: 2
after endPacket1: 1
after msg.empty: 1
etc.
Here's what it looks like when sending to two IPs:
begin loop: 0
after msg: 1
after beginPacket1: 0
after send1: 2
after endPacket1: 34
after beginPacket2: 0
after send2: 2
after endPacket2: 202
after msg.empty: 0
begin loop: 0
after msg: 0
after beginPacket1: 1
after send1: 2
after endPacket1: 200
after beginPacket2: 0
after send2: 2
after endPacket2: 202
after msg.empty: 1
begin loop: 0
after msg: 0
after beginPacket1: 1
after send1: 1
after endPacket1: 200
after beginPacket2: 0
after send2: 2
after endPacket2: 201
after msg.empty: 0
etc.
So it appears that adding a second IP results in Udp.endPacket() taking 200ms to execute each time it's called.
Here's the sketch I'm running now:
#include <OSCMessage.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <OSCMessage.h>
EthernetUDP Udp;
//the Arduino's IP
IPAddress ip(192, 168, 1, 9);
//destination IPs
IPAddress ip1(192, 168, 1, 2);
IPAddress ip2(192, 168, 1, 17);
const unsigned int outPort = 9999;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE };
unsigned long time, start;
void setup() {
Ethernet.begin(mac,ip);
Udp.begin(8888);
Serial.begin(115200);
}
void loop(){
start = millis();
Serial.print("begin loop: ");
time = millis() - start;
Serial.println(time);
start = millis();
OSCMessage msg("/analog/0");
msg.add((int32_t)analogRead(0));
Serial.print("after msg: ");
time = millis() - start;
Serial.println(time);
start = millis();
Udp.beginPacket(ip1, outPort);
Serial.print("after beginPacket1: ");
time = millis() - start;
Serial.println(time);
start = millis();
msg.send(Udp);
Serial.print("after send1: ");
time = millis() - start;
Serial.println(time);
start = millis();
Udp.endPacket();
Serial.print("after endPacket1: ");
time = millis() - start;
Serial.println(time);
start = millis();
Udp.beginPacket(ip2, outPort);
Serial.print("after beginPacket2: ");
time = millis() - start;
Serial.println(time);
start = millis();
msg.send(Udp);
Serial.print("after send2: ");
time = millis() - start;
Serial.println(time);
start = millis();
Udp.endPacket();
Serial.print("after endPacket2: ");
time = millis() - start;
Serial.println(time);
start = millis();
msg.empty();
Serial.print("after msg.empty: ");
time = millis() - start;
Serial.println(time);
}
Also, sending two packets per loop (as in the above code) but using the same IP for each doesn't result in any delay, it's only when the two packets are sending to different IPs that the 200ms delay appears after Udp.endPacket()...