#include #include #include #include #include #include #include #define MAX_DGRAM_SIZE 10000 static char buf[MAX_DGRAM_SIZE]; int main(int argc, char **argv) { char *addr = NULL, *port = "9000"; struct addrinfo *info, hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_DGRAM, .ai_flags = AI_PASSIVE, }; int i, rc, sock; if (argc > 1) addr = argv[1]; if (argc > 2) addr = argv[2]; if (!addr) { fprintf(stderr, "usage: %s addr [port]\n", argv[0]); return EXIT_FAILURE; } rc = getaddrinfo(addr, port, &hints, &info); if (rc != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rc)); return EXIT_FAILURE; } sock = socket(info->ai_family, info->ai_socktype, info->ai_protocol); if (sock == -1) { perror("socket"); return EXIT_FAILURE; } if (connect(sock, info->ai_addr, info->ai_addrlen) == -1) { perror("connect"); return EXIT_FAILURE; } for (i = 0; i < MAX_DGRAM_SIZE; i++) { if (send(sock, buf, i+1, MSG_DONTWAIT) == -1) { if (errno != EAGAIN && errno != EINTR) { perror("send"); return EXIT_FAILURE; } } } return 0; }