--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <errno.h>
+#include <netdb.h>
+
+#include "p2pkp.h"
+
+int main(int argc, char **argv)
+{
+ int sock, err;
+ struct sockaddr_in psin;
+ struct hostent *host;
+
+ if (argc != 4) {
+ fprintf(stderr, "Usage: %s <peer_ip> <peer_port> <file_name>\n", argv[0]);
+ return -1;
+ }
+
+ printf("Opening AF_P2PKP socket\n");
+
+ sock = socket(AF_P2PKP, SOCK_DGRAM, 0);
+ printf("Socket returned: %d\n", sock);
+
+ if (sock < 0) {
+ printf("Cannot create AF_P2PKP socket: %s(%d)\n",
+ strerror(errno), errno);
+ return -1;
+ }
+ printf("Successfully created AF_P2PKP socket: %d\n", sock);
+
+ argv++;
+
+ host = gethostbyname(argv[0]);
+ psin.sin_family = AF_INET;
+ psin.sin_port = htons(atoi(argv[1]));
+ psin.sin_addr = *((struct in_addr *)host->h_addr);
+
+ if (bind(sock, (struct sockaddr *)&psin,
+ sizeof(struct sockaddr_in)) == -1) {
+ printf("Cannot bind to server: %s(%d)\n", strerror(errno), errno);
+ return -1;
+ }
+ argv += 2;
+
+ printf("Bound to: %s:%s\n", argv[0], argv[1]);
+
+ err = read(sock, argv[0], sizeof(argv[0]));
+ if (err < 0) {
+ printf("Error while receiving file %s: %s(%d)\n", argv[0],
+ strerror(errno), errno);
+ return err;
+ }
+
+ printf("Successfully read file %s\n", argv[0]);
+
+ return 0;
+}