Function with optional parameters?

I'm working on an ethernet library and the hardware needs an IP address, MAC address, and optionally a gateway. I have it working with the required options, but I'm not sure how to handle the optional gateway.

I want to initialize the ethernet with the gateway IF it's passed as the third element to init_server() but I can't figure out the syntax for an optional array of bytes. How would I make a gwip optional, and if present call the set_gateway() function?

static byte mymac[6] = { 0x00,0x55,0x58,0x10,0x00,0x24 };
static byte myip[4] = { 192,168,5,99 };
static byte gwip[4] = { 192,168,5,1 };

void init_server(byte* ip, int port, byte* gwip[1] = {0}) {
  if (gwip[0] > 0) { set_gateway(gwip); }

  es.ES_init_ip_arp_udp_tcp(HW_MAC, ip, port);
}

void setup() {
  init_server(myip,myport,gwip);
}

I believe that in C++, rather than defining a single function with optional arguments, you simply create two functions; one with the argument and one without:

void init_server(byte *ip, int port)
{
  es.ES_init_ip_arp_udp_tcp(HW_MAC, ip, port);
}

void init_server(byte *ip, int port, byte* gw)
{
 set_gateway(gw);
 init_server(ip, port);
}

It looks like you can also have default values for unprovided arguments:

void init_server(byte *ip, int port, byte *gw=(byte *)"")

(it doesn't seem to like byte *gw = {0,0,0,0} though...)

That's so simple! I didn't even think about overloading the function. I was more wrapped up with the default option. That will totally work, thanks.