From 61c5acbcfabcee23b7235ee63480ac2359764232 Mon Sep 17 00:00:00 2001 From: cdez Date: Mon, 21 Apr 2025 19:01:16 -0700 Subject: [PATCH] Remove all the unnecessary files for the branch --- echoserver/Makefile | 20 - echoserver/README.md | 10 - echoserver/echoserver.c | 150 ----- echoserver/echoserver.h | 25 - networksim/CS460Homework4_CBvCB_graph.png | Bin 72350 -> 0 bytes networksim/CS460Homework4_Cubic_graph.png | Bin 46473 -> 0 bytes networksim/CS460Homework4_NRvCB_graph.png | Bin 70374 -> 0 bytes networksim/CS460Homework4_NRvNR_graph.png | Bin 54944 -> 0 bytes networksim/CS460Homework4_NewReno_graph.png | Bin 35136 -> 0 bytes networksim/CS460Homework4_graph.png | Bin 73931 -> 0 bytes networksim/CS460Homework4_graph_5p.png | Bin 113285 -> 0 bytes networksim/README.md | 7 - networksim/tcp-variants-comparison.cc | 624 -------------------- timeserver/Makefile | 20 - timeserver/README.md | 16 - timeserver/demo.pcap | Bin 54532 -> 0 bytes timeserver/timeserver.c | 83 --- timeserver/timeserver.h | 23 - 18 files changed, 978 deletions(-) delete mode 100644 echoserver/Makefile delete mode 100644 echoserver/README.md delete mode 100644 echoserver/echoserver.c delete mode 100644 echoserver/echoserver.h delete mode 100644 networksim/CS460Homework4_CBvCB_graph.png delete mode 100644 networksim/CS460Homework4_Cubic_graph.png delete mode 100644 networksim/CS460Homework4_NRvCB_graph.png delete mode 100644 networksim/CS460Homework4_NRvNR_graph.png delete mode 100644 networksim/CS460Homework4_NewReno_graph.png delete mode 100644 networksim/CS460Homework4_graph.png delete mode 100644 networksim/CS460Homework4_graph_5p.png delete mode 100644 networksim/README.md delete mode 100644 networksim/tcp-variants-comparison.cc delete mode 100644 timeserver/Makefile delete mode 100644 timeserver/README.md delete mode 100644 timeserver/demo.pcap delete mode 100644 timeserver/timeserver.c delete mode 100644 timeserver/timeserver.h diff --git a/echoserver/Makefile b/echoserver/Makefile deleted file mode 100644 index 221b29f..0000000 --- a/echoserver/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -CC = gcc -Wall -std=c11 -pedantic -SOURCES = echoserver.c -OBJECTS = echoserver.o - -all: echoserver - -echoserver: $(OBJECTS) - $(CC) $(OBJECTS) -o echoserver - -echoserver.o: echoserver.c - $(CC) -c echoserver.c -o echoserver.o - -clean: - rm -f $(OBJECTS) echoserver echoserver.out - -clean_objects: - rm -f $(OBJECTS) - -run: - ./echoserver diff --git a/echoserver/README.md b/echoserver/README.md deleted file mode 100644 index fb81333..0000000 --- a/echoserver/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Running the echoserver -Use `make` to compile the echoserver. -Use `make run` to run the echoserver. This will run on an infinite loop. -Use `Ctrl+C` to stop the echoserver. - -## echoserver communication -Communicating with the server can happen using telnet in TCP mode. - -## echoserver information -The echoserver runs on TCP port 8888. \ No newline at end of file diff --git a/echoserver/echoserver.c b/echoserver/echoserver.c deleted file mode 100644 index 73e2bbc..0000000 --- a/echoserver/echoserver.c +++ /dev/null @@ -1,150 +0,0 @@ -// header files -#include "echoserver.h" - -// constants -// echoserver port is 8888 -#define ECHOPORT 8888 -#define BUFFER_SIZE 1024 -#define MAX_CONNECT_QUEUE 10 - -// prototypes - -// main function -int main(int argc, char **argv) -{ - // initialize program (variables and structs) - bool quitFlag = true; - int socketEchoFD; - int clientEchoFD; - int reuseAddrOpt = 1; - int keepAliveOpt = 1; - char message[BUFFER_SIZE]; - int messageBytes; - struct sockaddr_in serverAddr; - struct sockaddr_storage clientAddr; - socklen_t clientSize; - memset(&serverAddr, 0, sizeof(serverAddr)); - memset(&clientAddr, 0, sizeof(clientAddr)); - // define a TCP socket - socketEchoFD = socket(AF_INET, SOCK_STREAM, 0); - if(socketEchoFD < 0) - { - printf("Unable to create the socket.\n"); - return -1; - } - // use the setsockopt function to make the socket accept different configurations - // allow for the reuse of the address/bind. - setsockopt(socketEchoFD, SOL_SOCKET, SO_REUSEADDR, &reuseAddrOpt, sizeof(reuseAddrOpt)); - // also need to set the socket to keepalive using setsockopt - setsockopt(socketEchoFD, SOL_SOCKET, SO_KEEPALIVE, &keepAliveOpt, sizeof(keepAliveOpt)); - // bind the TCP socket to port 8888 / ECHOPORT - serverAddr.sin_family = AF_INET; - serverAddr.sin_addr.s_addr = INADDR_ANY; - serverAddr.sin_port = htons(ECHOPORT); - int bindCheck = bind(socketEchoFD, &serverAddr, sizeof(serverAddr)); - if(bindCheck < 0) - { - printf("Unable to bind the socket to the port or address.\n Is either in use?"); - return -1; - } - // use fnctl to set the non-blocking flag for the socket - fcntl(socketEchoFD, F_SETFL, O_NONBLOCK); - // the server will now accept client connections by listening. - listen(socketEchoFD, MAX_CONNECT_QUEUE); - // create a file descriptor set, to keep track of the sockets in use using fd_set and FD_ZERO? - fd_set socketList; - FD_ZERO(&socketList); - // add the socketEchoFD to the file descriptor set using fd_set - FD_SET(socketEchoFD, &socketList); - // max file descriptor, this will be used to 'find' the socket currently connected - int maxFD = socketEchoFD; - // while loop that will continue to listen for messages from clients. - printf("Echoserver listening on port: %d\n", ECHOPORT); - while (quitFlag) - { - // set of active connections - fd_set activeSet = socketList; - // use the select() function here to check the set of sockets - int selectedFD = select(maxFD+1, &activeSet, NULL, NULL, NULL); - // check to make sure select() didn't error out. - if(selectedFD == -1) - { - // - printf("\nUnable to select socket to listen to.\n"); - return -1; - } - // for loop that loops up to the max file descriptor. - for(int fileIter = 0; fileIter <= maxFD; fileIter++) - { - // check to see if the file descriptor is in the set of sockets using FD_ISSET() - if(FD_ISSET(fileIter, &activeSet)) - { - // if the server socket is being written to/read from, - if(fileIter == socketEchoFD) - { - // create a client socket using accept - clientSize = sizeof(clientAddr); - clientEchoFD = accept(socketEchoFD, &clientAddr, &clientSize); - // check to see if the client socket is connected (-1) - if(clientEchoFD == -1) - { - printf("\nCould not connect the client to a socket.\n"); - return -1; - } - else - { - // set the non blocking flag using fnctl - fcntl(clientEchoFD, F_SETFL, O_NONBLOCK); - // add the client socket to the set of file descriptor sockets - FD_SET(clientEchoFD, &socketList); - // check to see if the new socket FD is greater than the current max (clientSocket > maxFD) - if(clientEchoFD > maxFD) - { - // if it is, set the new max. - maxFD = clientEchoFD; - } - printf("\nConnected client to socket.\n"); - } - printf("\nAccepted connection from new client.\n"); - } - // if the client socket(s) are being written to/read from, - else - { - // grab the data from the client, save to message. - messageBytes = recv(fileIter, message, BUFFER_SIZE, 0); - // make sure that the connection is still open before attempting to send. - if(messageBytes <= 0) // old: messageBytes <= 0 - { - // if it is not open, close the socket and remove the socket from the socket list using FD_CLR() - close(fileIter); - FD_CLR(fileIter, &socketList); - printf("\nClient has closed connection.\n"); - } - else - { - // if it is open, send the message back to the client over the client socket - send(fileIter, message, messageBytes, 0); - printf("\nMessage has been sent back to client.\n"); - } - } - } - } - } - // close the socket - close(socketEchoFD); - // profit??? - return 0; -} - -// function definitions - -/* -Name: ??? -Process: ??? -Function Input/Parameters: ??? -Function Output/Parameters: ??? -Function Output/Returned: ??? -Device Input/Device: ??? -Device Output/Device: ??? -Dependencies: ??? -*/ \ No newline at end of file diff --git a/echoserver/echoserver.h b/echoserver/echoserver.h deleted file mode 100644 index b1ef31c..0000000 --- a/echoserver/echoserver.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef ECHOSERVER -#define ECHOSERVER - -// included libraries -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// data structures - -// function prototypes - -#endif // ECHOSERVER \ No newline at end of file diff --git a/networksim/CS460Homework4_CBvCB_graph.png b/networksim/CS460Homework4_CBvCB_graph.png deleted file mode 100644 index 0005c3ad4f95eb8c8bd128bccbb2561c82c9743e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72350 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