int main(void) { struct UDPsopa sopa = { .sop = NULL, .pap = NULL, .port = 0, // 0 = pick unused port .packet_size = 512, .packet_num = 0, .host_port = 4444 }; strcpy(sopa.host_name, "127.0.0.1"); if (udp_setup(&sopa) != 0) { udp_cleanup(&sopa); exit(EXIT_FAILURE); } // additional client setup if (SDLNet_ResolveHost(&(sopa.pap->address), sopa.host_name, sopa.host_port) != 0) { printf("SDLNet_ResolveHost(&(sopa.pap->address), sopa.host_name, sopa.host_port) != 0\n"); printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError()); udp_cleanup(&sopa); exit(EXIT_FAILURE); } srand(123); for (;;) { sleep(1); // 1 second sprintf((char*)sopa.pap->data, "rand_num = %d", rand()); sopa.pap->len = strlen((char*)sopa.pap->data) + 1; const int channel = -1; // -1 = use packet's address as destination if (SDLNet_UDP_Send(sopa.sop, channel, sopa.pap) == 0) { printf("SDLNet_UDP_Send(sopa.sop, channel, sopa.pap) == 0\n"); printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError()); udp_cleanup(&sopa); exit(EXIT_FAILURE); } switch (SDLNet_UDP_Recv(sopa.sop, sopa.pap)) { case -1: printf("SDLNet_UDP_Recv(sopa.sop, sopa.pap) == -1\n"); printf("SDLNet_GetError() = '%s'\n", SDLNet_GetError()); udp_cleanup(&sopa); exit(EXIT_FAILURE); case 0: printf("SDLNet_UDP_Recv(sopa.sop, sopa.pap) == 0 // no packets received\n"); break; case 1: sopa.packet_num++; udp_print(&sopa); break; } } // for(;;) udp_cleanup(&sopa); exit(EXIT_SUCCESS); }
static void etherframe_print(u_char *usr, const struct pcap_pkthdr *pkt, const u_char *d, uint16_t ethtype) { struct iphdr *ip; struct tcphdr *th; struct udphdr *uh; uint16_t ethtype_le; ethtype_le = ntohs(ethtype); switch (ethtype_le) { case ETH_P_IP: ip = ip_hdr(d); sb_append_str(&sb, "IP: "); iphdr_print(ip, &sb); switch (ip->protocol) { case IPPROTO_TCP: th = tcp_hdr(d + ip_hdrlen(ip)); sb_append_str(&sb, "; TCP: "); tcp_print(th, &sb); break; case IPPROTO_UDP: uh = udp_hdr(d + ip_hdrlen(ip)); sb_append_str(&sb, "; UDP: "); udp_print(uh, &sb); break; default: sb_append_char(&sb, ' '); sb_append_str(&sb, ipproto_str(ip->protocol)); } break; default: /* FIXME: This code is open to buffer overrun errors */ sb_append_str(&sb, "ether type: "); sb.len += sprintf(sb_curr(&sb), "0x%04x ", ethtype_le); sb_append_str(&sb, ethertype_to_str(ethtype_le)); } }