#include <net/sock.h>
 
-#define P2PKP_DEFAULT_BUF_LEN  256
+#define P2PKP_DEFAULT_BUF_LEN  8196
 #define P2PKP_DEFAULT_MODE             0644
 
 struct p2pkp_conn_info {
 
--- /dev/null
+all: client server
+
+.PHONY: client server clean
+client server:
+       make -C $@
+
+run: client server
+       @./test.sh
+
+clean:
+       -make -C client clean
+       -make -C server clean
 
 FILE=client
+CFLAGS=-Wall -g
 
 $(FILE):$(FILE).o
 
 
 #include <errno.h>
 #include <netdb.h>
 
+#include "../utils/utils.h"
+
 #define MAX_NUMBER_OF_PEERS            256
-#define CHUNK_SIZE                     256
 
 int main(int argc, char **argv) {
        int sock, err;
                        printf("Opening file error: %s(%d)\n", strerror(errno), errno);
                        i--;
                }
+               argv += 2;
        }
 
        total = i;
                sent_size = 0;
 
                for (i = 0; i < total; i++) {
-                       if ((err = sendfile(fd[i], peers[i], NULL, CHUNK_SIZE)) < 0) {
+                       if ((err = sendfile(peers[i], fd[i], NULL, CHUNK_SIZE)) < 0) {
                                printf("Sending file error: %s(%d)\n", strerror(errno), errno);
-                       } else {
-                               sent_size += err;
+                               continue;
                        }
+                       sent_size += err;
+                       usleep(20);
                }
        } while(sent_size);
 
 
 FILE=server
+CFLAGS=-Wall -g
 
 $(FILE):$(FILE).o
 
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <string.h>
+#include <unistd.h>
 #include <stdlib.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <netdb.h>
 #include <stdio.h>
 
-#define BUFFER_SIZE            256
+#include "../utils/utils.h"
 
 int main(int argc, char **argv)
 {
-       int sock, err, file_fd;
+       int sock, file_fd;
        ssize_t ret, len, offset, bytes_to_write;
        struct sockaddr_in psin;
        struct hostent *host;
-       char buffer[BUFFER_SIZE];
+       char buffer[CHUNK_SIZE];
 
        if (argc != 4) {
                fprintf(stderr, "Usage: %s <peer_ip> <peer_port> <file_name>\n", argv[0]);
        printf("Bound to: %s:%s\n", argv[1], argv[2]);
        
        for (;;) {
-               ret = read(sock, buffer, BUFFER_SIZE);
+               ret = read(sock, buffer, CHUNK_SIZE);
                if (ret < 0) {
                        printf("Error while receiving file %s: %s(%d)\n", argv[0],
                                        strerror(errno), errno);
-                       return err;
+                       return ret;
                } else if (ret == 0) {
                        break;
                }
                        }
                        bytes_to_write -= len;
                        offset += len;
-               } while (bytes_to_write > 0);
-               if (ret < BUFFER_SIZE)
-                       break;
+               } while (bytes_to_write);
        }
 
-       printf("Successfully read file %s\n", argv[0]);
+       printf("Successfully read file %s\n", argv[3]);
 
        return 0;
 }
 
--- /dev/null
+#!/bin/bash
+
+MODULE_NAME=af_p2pkp
+MODULE_DIR=../module
+CLIENT=client/client
+SERVER=server/server
+FILE=/tmp/testfile1
+IP="127.0.0.1"
+WAIT_TIME=5
+
+LISTENERS_PORTS=(
+       60000
+)
+
+
+#use nc.traditional
+echo 2 | update-alternatives --config nc &> /dev/null
+
+[ -e $FILE ] || exit
+
+#increase tests debugging
+set -x
+
+# listen for UDP packets on localhost, port 60000 (run in background)
+for port in "${LISTENERS_PORTS[@]}"; do
+       $SERVER $IP $port testfile.$port &
+       pids="$pids $!"
+       ARGUMENTS="$IP $port $ARGUMENTS"
+done
+
+# wait for netcat to start listening
+sleep 1
+
+$CLIENT $FILE $ARGUMENTS
+
+sleep $WAIT_TIME
+# kill netcat
+for pid in $pids; do
+       kill -9 $pid &> /dev/null
+done
 
--- /dev/null
+#ifndef _SENDFILE_UTILS_H_
+#define _SENDFILE_UTILS_H_
+
+#define CHUNK_SIZE 8196
+#endif /* _SENDFILE_UTILS_H_ */