ddos/client.c
changeset 157 e8fbd0653fda
parent 77 49e0babccb23
child 160 26414889dded
--- a/ddos/client.c
+++ b/ddos/client.c
@@ -11,33 +11,54 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <sys/types.h>
+#include <netdb.h>
+
+#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");