--- 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");