fork download
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netdb.h>
  4. #include <unistd.h>
  5. #include <cstdio>
  6. #include <cerrno>
  7. #include <cstdlib>
  8.  
  9. int main (int ac, char **av) {
  10.  
  11. if(ac != 3) {
  12. fprintf(stderr, "Usage: %s hostname portnumber\n", *av);
  13. return 1;
  14. }
  15.  
  16. struct addrinfo *res0;
  17. struct addrinfo hints = { AI_CANONNAME, 0, SOCK_DGRAM };
  18. int rc = getaddrinfo(av[1], av[2], &hints, &res0);
  19. if(rc) {
  20. fprintf(stderr, "%s/%s: %s\n", av[1], av[2], gai_strerror(rc));
  21. return 1;
  22. }
  23.  
  24. char *name = res0->ai_canonname;
  25. for(struct addrinfo *res = res0; res; res=res->ai_next) {
  26. fprintf(stderr, "%s: %04X/%04X/%04X ", name, res->ai_family, res->ai_socktype, res->ai_protocol);
  27. int fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
  28. if(fd < 0) {
  29. perror("socket");
  30. continue;
  31. }
  32.  
  33. rc = connect(fd, res->ai_addr, res->ai_addrlen);
  34. if(rc < 0) {
  35. perror("connect");
  36. continue;
  37. }
  38. fprintf(stderr, "Connected (%d)\n", fd);
  39. *(unsigned short*)res->ai_addr = htons(*(unsigned short*)res->ai_addr);
  40. rc = send(fd, res->ai_addr, res->ai_addrlen, 0);
  41. *(unsigned short*)res->ai_addr = ntohs(*(unsigned short*)res->ai_addr);
  42. if(rc < 0) {
  43. perror("send");
  44. }
  45. close(fd);
  46. }
  47. freeaddrinfo(res0);
  48. }
  49.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty