diff --git a/ddos/client.c b/ddos/client.c --- a/ddos/client.c +++ b/ddos/client.c @@ -11,33 +11,54 @@ #include #include #include +#include + +#define MAXLEN 80 + +int client_write (int client_socket, char *s) +{ + return write (client_socket, s, strlen (s)); +} int main (int argc, char **argv) { - char message[81]; + char message[MAXLEN + 1]; int client_socket; - struct sockaddr_in ca; - socklen_t size; int status; - client_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (client_socket == -1) { - perror ("socket"); - return EXIT_FAILURE; + struct addrinfo hints, *result, *rp; + + memset (&hints, 0, sizeof (struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = 0; + hints.ai_protocol = IPPROTO_TCP; + + if (getaddrinfo ("localhost", "4000", &hints, &result) != 0) { + perror ("getaddrinfo"); + return -1; } - ca.sin_family = AF_INET; - ca.sin_port = htons (4000); - ca.sin_addr.s_addr = inet_addr ("127.0.0.1"); - - size = sizeof (ca); + client_socket = -1; + for (rp = result; rp != NULL; rp = rp->ai_next) { + if ((client_socket = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol)) == -1) + continue; - status = connect (client_socket, (struct sockaddr *)&ca, size); - status = write (client_socket, "Hello\r\n", 8); + if (connect (client_socket, rp->ai_addr, rp->ai_addrlen) != -1) { + break; + } + close (client_socket); + client_socket = -1; + } + + if (result != NULL) + freeaddrinfo (result); + + status = client_write (client_socket, "Hello\r\n"); while (client_socket > 0) { - status = read (client_socket, message, 80); + status = read (client_socket, message, MAXLEN); if (status > 0) { - message[status] = 0; + message[status] = '\0'; printf ("SERVER RESPONS: %s", message); } else { perror ("READ");