From 817a3b2422c7966fc0ae47ba7ebfbd086792471c Mon Sep 17 00:00:00 2001 From: iceyrazor Date: Fri, 25 Sep 2026 21:33:11 -0500 Subject: init --- .gitignore | 2 ++ .gitmodules | 6 ++++ build.sh | 25 ++++++++++++++++ compile_flags.txt | 2 ++ libs/iceys-c-libs | 1 + libs/socket | 1 + src/client-polled.c | 71 ++++++++++++++++++++++++++++++++++++++++++++ src/client.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 56 +++++++++++++++++++++++++++++++++++ 9 files changed, 248 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100755 build.sh create mode 100644 compile_flags.txt create mode 160000 libs/iceys-c-libs create mode 160000 libs/socket create mode 100755 src/client-polled.c create mode 100755 src/client.c create mode 100755 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a0795f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/** +obj/** diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..af1d5a0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "libs/socket"] + path = libs/socket + url = https://git.iceyfox.xyz/iceyrazor/socket +[submodule "libs/iceys-c-libs"] + path = libs/iceys-c-libs + url = https://git.iceyfox.xyz/iceyrazor/iceys-c-libs diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..0139160 --- /dev/null +++ b/build.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -e + +DEBUG_FLAGS="" +LIB="-Ilibs/iceys-c-libs -Ilibs/socket" + +mkdir -p bin +mkdir -p obj + +while getopts "d" opt; do + case "$opt" in + d) DEBUG_FLAGS="-Wall -fsanitize=address -g" + ;; + esac +done + +shift $((OPTIND-1)) +[ "${1:-}" = "--" ] && shift + +printf "\n\nmaking project\n" +clang -Ilibs/iceys-c-libs -c libs/iceys-c-libs/iceys-utils.c -o obj/iceys-utils.o + +clang obj/iceys-utils.o -o bin/socket src/main.c $LIB $DEBUG_FLAGS -lm +clang -o bin/client src/client.c $LIB $DEBUG_FLAGS -lm +clang -o bin/client-polled src/client-polled.c $LIB $DEBUG_FLAGS -lm diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 0000000..edd63a2 --- /dev/null +++ b/compile_flags.txt @@ -0,0 +1,2 @@ +-I/home/iceyrazor/stuff/scripts/c/my_utils/socket +-Ilibs/iceys-c-libs \ No newline at end of file diff --git a/libs/iceys-c-libs b/libs/iceys-c-libs new file mode 160000 index 0000000..a5e1191 --- /dev/null +++ b/libs/iceys-c-libs @@ -0,0 +1 @@ +Subproject commit a5e1191ad6c34636eb49c0ddaeb9af1bd5c07a2d diff --git a/libs/socket b/libs/socket new file mode 160000 index 0000000..7e287a8 --- /dev/null +++ b/libs/socket @@ -0,0 +1 @@ +Subproject commit 7e287a8ca7164e871965339196511fdcf0248921 diff --git a/src/client-polled.c b/src/client-polled.c new file mode 100755 index 0000000..9a88436 --- /dev/null +++ b/src/client-polled.c @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include "iceys-utils.c" + +#define SA(ptr) ((struct sockaddr *)(ptr)) + +int main(int argc, char *argv[]){ + if (argc<2){ + fprintf(stderr, "arg1 must be set for port\n"); + exit(-1); + } + int port = atoi(argv[1]); + if (port == 0) { + fprintf(stderr, "port must not be 0\n"); + exit(-1); + } + + int socketfd = socket(AF_INET, SOCK_STREAM, 0); + + + struct sockaddr_in address = {0}; + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr("127.0.0.1"); + + + int con_err=connect(socketfd, SA(&address), sizeof(address)); + if (con_err<0){ + printf("connect error %d\n",con_err); + perror("socketfd error"); + exit(-1); + } + + struct pollfd fds[2] = { + { + 0, + POLLIN, + 0 + }, + { + socketfd, + POLLIN, + 0 + } + }; + + + for (;;){ + char buffer[30000]={0}; + poll(fds, 2, 50000); + + if (fds[0].revents & POLLIN) { + read(0, buffer, 30000); + send(socketfd, buffer, 30000, 0); + } else if(fds[1].revents & POLLIN){ + //if(read(socketfd,buffer,30000)<0){ printf("\nREAD FAILED\n\n"); close(new_socket); break; } + if(recv(socketfd, buffer, 30000, 0)==0){ + printf("recv got 0 --client\n\n"); + exit(1); + } + printf("%s\n",buffer); + + } + } + + return 0; +} diff --git a/src/client.c b/src/client.c new file mode 100755 index 0000000..4f68d89 --- /dev/null +++ b/src/client.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "launch-socket.c" +#include "iceys-utils.c" + +#define SA(ptr) ((struct sockaddr *)(ptr)) + +void *recv_data_c(void *arg) { + int socketfd = *(int *)arg; + while(1){ + char buffer[30000]={0}; + recv(socketfd, buffer, 30000, 0); + printf("%s\n ",buffer); + } +} + +int main(int argc, char *argv[]){ + if (argc<2){ + fprintf(stderr, "arg1 must be set for port\n"); + exit(-1); + } + int port = atoi(argv[1]); + if (port == 0) { + fprintf(stderr, "port must not be 0\n"); + exit(-1); + } + + int socketfd = socket(AF_INET, SOCK_STREAM, 0); + + struct sockaddr_in address = {0}; + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr("127.0.0.1"); + + + int con_err=connect(socketfd, SA(&address), sizeof(address)); + if (con_err<0){ + printf("connect error %d\n",con_err); + perror("socketfd error"); + exit(-1); + } + + char *name = NULL; + size_t nameSize = 0; + printf("please enter your name\n"); + ssize_t nameCount = getline(&name, &nameSize, stdin); + name[nameCount-1]=0; //gets rid of newline + + + char *line = NULL; + size_t lineSize = 0; + + pthread_t id; + pthread_create(&id, NULL, recv_data_c, &socketfd); + + + char send_buf[30000]; + + while(1){ + ssize_t charCount = getline(&line, &lineSize, stdin); + line[charCount-1]=0; //gets rid of newline + sprintf(send_buf, "%s:%s", name, line); + + if(charCount>0){ + if(strcmp(line,"exit")==0){ + break; + } else { + send(socketfd, send_buf, strlen(send_buf), 0); + } + } + } + + + close(socketfd); + + + return 0; +} diff --git a/src/main.c b/src/main.c new file mode 100755 index 0000000..8b28d63 --- /dev/null +++ b/src/main.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include + +// dont use stdio in these +sig_atomic_t running = 1; +void sig_int_handler(int num) +{ + running = 0; +} + +void on_message(struct Server* server, char message[], ssize_t amountRecv, int socketFD) +{ + if (amountRecv > 0) { + printf("%s\n", message); + + struct AcceptedSocket* sel_socket = server->accepted_socket; + while (sel_socket != NULL) { + if (sel_socket->socketFD != socketFD) { + send(sel_socket->socketFD, message, 30000, 0); + } + sel_socket = sel_socket->next; + } + } +} + +int main(int argc, char* argv[]) +{ + if (argc < 2) { + fprintf(stderr, "arg1 must be set for port\n"); + exit(-1); + } + int port = atoi(argv[1]); + if (port == 0) { + fprintf(stderr, "port must not be 0\n"); + exit(-1); + } + + struct Server server = server_constructor(AF_INET, SOCK_STREAM, 0, INADDR_ANY, port, 10, launch_socket); + server.on_message = on_message; + pthread_t server_thread = server.launch(&server); + + struct sigaction act = { 0 }; + act.sa_handler = &sig_int_handler; + sigaction(SIGINT, &act, NULL); + + while (running) { } + + server_close_socket(&server); + pthread_join(server_thread, NULL); + + return 0; +} -- cgit v1.3