summaryrefslogtreecommitdiff
path: root/clip
diff options
context:
space:
mode:
authorCody Hiar <cody@hiar.ca>2020-04-12 09:49:20 -0600
committerCody Hiar <cody@hiar.ca>2020-04-12 09:49:20 -0600
commit9142f56b4c3773e9d1779b0bbffdc26549c9734d (patch)
tree089a3add6370ecc470b6a19dbd07946e9f550875 /clip
parent2cd866e3fa0cbec2b53a3b5851792da320fc1c71 (diff)
Move clip to it's own repo
Diffstat (limited to 'clip')
-rw-r--r--clip/Makefile6
-rw-r--r--clip/clip.c125
2 files changed, 0 insertions, 131 deletions
diff --git a/clip/Makefile b/clip/Makefile
deleted file mode 100644
index 426a721..0000000
--- a/clip/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-build:
- gcc -Wall -Wextra -Wpedantic --std=gnu99 clip.c -o clip
-
-lint:
- splint clip.c
diff --git a/clip/clip.c b/clip/clip.c
deleted file mode 100644
index 19e785d..0000000
--- a/clip/clip.c
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <time.h>
-#include <unistd.h>
-#include <errno.h>
-
-#define BUFF_SIZE 1024
-#define ONE_SECOND_IN_NANOSECONDS 1000000000
-
-static long int calulate_difference(struct timespec a, struct timespec b);
-
-int
-main() {
- int server_fd, new_socket;
- struct sockaddr_in address;
- int opt = 1;
- int port = 8888;
- int addrlen = sizeof(address);
- char *buffer;
-
- // Create socket
- if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
- {
- perror("Could not create socket");
- exit(EXIT_FAILURE);
- }
-
- // Set socket options
- if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR,
- &opt, sizeof(opt)))
- {
- perror("Error during setsockopt");
- exit(EXIT_FAILURE);
- }
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_port = htons( port );
-
- //Bind
- if(bind(server_fd,(struct sockaddr *)&address , sizeof(address)) < 0)
- {
- perror("Bind failure");
- exit(EXIT_FAILURE);
- }
-
- if (listen(server_fd, 20) < 0)
- {
- perror("Listen failure");
- exit(EXIT_FAILURE);
- }
-
-
- while (1) {
- new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
-
- if (new_socket < 0) {
- perror("accept");
- exit(EXIT_FAILURE);
- }
-
- // Set the socket to non blocking
- fcntl(new_socket, F_SETFL, O_NONBLOCK);
-
- buffer = malloc(sizeof(char) * BUFF_SIZE);
-
- /* int res = 0; */
- int count = 0;
- int idx = 0;
- int size_recv = 0;
- long int timeout = ONE_SECOND_IN_NANOSECONDS / 10;
- struct timespec begin;
- struct timespec now;
- long int timediff;
- char chunk[BUFF_SIZE];
-
- clock_gettime(CLOCK_MONOTONIC, &begin);
-
- while (1) {
- clock_gettime(CLOCK_MONOTONIC, &now);
-
- timediff = calulate_difference(now, begin);
-
- //if you got some data, then break after timeout
- if( count > 0 && timediff > timeout )
- {
- break;
- }
-
- memset(chunk, 0, BUFF_SIZE); //clear the variable
- size_recv = recv(new_socket, chunk, BUFF_SIZE, 0);
-
-
- if (size_recv > 0)
- {
- buffer = realloc(buffer, (idx + BUFF_SIZE) * sizeof(char));
- memcpy((char *)buffer + idx, chunk, BUFF_SIZE);
- clock_gettime(CLOCK_MONOTONIC, &begin);
- }
- else if (errno != EWOULDBLOCK)
- {
- usleep(ONE_SECOND_IN_NANOSECONDS / 10000000);
- }
-
- count++;
- idx = count * BUFF_SIZE;
- }
-
- printf("%s\n", buffer);
- close(new_socket);
- free(buffer);
- }
-
- return 0;
-}
-
-static long int
-calulate_difference(struct timespec a, struct timespec b) {
- int seconds_to_nanoseconds = (a.tv_sec - b.tv_sec) * 1000000000;
- return seconds_to_nanoseconds + a.tv_nsec - b.tv_nsec;
-}
-