X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=blobdiff_plain;f=sendfile%2Fclient%2Fclient.c;h=f5d93be6894c63613a3b148a78bb04b1c45c2242;hb=f1d5f09dd86dfbbe34b8d915f150d68ed779f146;hp=fc5fa4cfb910fcfe045ac77271e35e6a0ec75522;hpb=ab115a782e7762ef93e57adfe1573841910f6fa3;p=p2p-kernel-protocol.git diff --git a/sendfile/client/client.c b/sendfile/client/client.c index fc5fa4c..f5d93be 100644 --- a/sendfile/client/client.c +++ b/sendfile/client/client.c @@ -1,5 +1,108 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../utils/utils.h" + +#define MAX_NUMBER_OF_PEERS 256 int main(int argc, char **argv) { - + int sock, err; + struct sockaddr_in psin; + struct hostent *host; + char *file_name; + int fd[MAX_NUMBER_OF_PEERS]; + int peers[MAX_NUMBER_OF_PEERS]; + int i = 0, total, sent_size; + struct timeval start; + struct timeval stop; + + if (argc < 4 || argc % 2) { + printf("Usage: %s " + " ...\n", argv[0]); + return -1; + } + + printf("Create sendfile socket\n"); + + sock = socket(AF_INET, SOCK_DGRAM, 0); + printf("Socket returned: %d\n", sock); + + if (sock < 0) { + printf("Cannot create sendfile socket: %s(%d)\n", + strerror(errno), errno); + return -1; + } + printf("Succesfully created sendfile socket\n"); + + argv++; + file_name = argv[0]; + argv++; + + while(*argv) { + printf("Create sendfile socket\n"); + + sock = socket(AF_INET, SOCK_DGRAM, 0); + printf("Socket returned: %d\n", sock); + + if (sock < 0) { + printf("Cannot create sendfile socket: %s(%d)\n", + strerror(errno), errno); + return -1; + } + printf("Succesfully created sendfile socket\n"); + + printf("Connecting to: %s:%s\n", argv[0], argv[1]); + 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 (connect(sock, (struct sockaddr *)&psin, + sizeof(struct sockaddr_in)) == -1) { + printf("Cannot connect to server: %s(%d)\n", + strerror(errno), errno); + continue; + } + printf("Connected to: %s:%s\n", argv[0], argv[1]); + peers[i] = sock; + fd[i] = open(file_name, O_RDONLY); + if (fd[i++] < 0) { + printf("Opening file error: %s(%d)\n", strerror(errno), errno); + i--; + } + argv += 2; + } + + total = i; + + gettimeofday(&start, NULL); + do { + sent_size = 0; + + for (i = 0; i < total; i++) { + if ((err = sendfile(peers[i], fd[i], NULL, CHUNK_SIZE)) < 0) { + printf("Sending file error: %s(%d)\n", strerror(errno), errno); + continue; + } + sent_size += err; + usleep(20); + } + } while(sent_size); + gettimeofday(&stop, NULL); + + printf("Successfully written %s in %ld seconds\n", file_name, + stop.tv_sec - start.tv_sec); + + return 0; }