/* Create a new NIO UDP */ nio_t *create_nio_udp(int local_port, char *remote_host, int remote_port) { nio_udp_t *nio_udp; nio_t *nio; if (!(nio = create_nio())) return NULL; nio_udp = &nio->u.nio_udp; nio_udp->local_port = local_port; nio_udp->remote_port = remote_port; if (!(nio_udp->remote_host = strdup(remote_host))) { fprintf(stderr, "create_nio_udp: insufficient memory\n"); free_nio(nio); return NULL; } if ((nio_udp->fd = udp_connect(local_port, remote_host, remote_port)) < 0) { fprintf(stderr, "create_nio_udp: unable to connect to %s:%d\n", remote_host, remote_port); free_nio(nio); return NULL; } nio->type = NIO_TYPE_UDP; nio->send = (void *)nio_udp_send; nio->recv = (void *)nio_udp_recv; nio->free = (void *)nio_udp_free; nio->dptr = &nio->u.nio_udp; return nio; }
/* Create a new NIO Ethernet (using PCAP) */ nio_t *create_nio_ethernet(char *dev_name) { nio_ethernet_t *nio_ethernet; nio_t *nio; if (!(nio = create_nio())) return NULL; nio_ethernet = &nio->u.nio_ethernet; if (!(nio_ethernet->pcap_dev = nio_ethernet_open(dev_name))) { free_nio(nio); return NULL; } nio->type = NIO_TYPE_ETHERNET; nio->send = (void *)nio_ethernet_send; nio->recv = (void *)nio_ethernet_recv; nio->free = (void *)nio_ethernet_free; nio->dptr = &nio->u.nio_ethernet; return nio; }