feat: Worker tells Host to remove itself from active port list when done

This commit is contained in:
Tristan Russell 2025-01-17 20:41:49 -05:00
parent 45378a6df7
commit 56f6c65a19
1 changed files with 28 additions and 1 deletions

29
main.c
View File

@ -5,6 +5,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
@ -26,6 +27,32 @@ int SetupServer(int* socket_fd, int port) {
return 0; return 0;
} }
int RemoveServer(int port) {
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(1337);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
int connected = connect(socket_fd, (struct sockaddr*)&server_addr, sizeof(server_addr));
if(connected < 0) {
printf("Connect error: %s (%i)\n", strerror(errno), errno);
return -1;
}
printf("Removing Server\n");
char data[5];
char flag = 0x1;
u_int32_t nport = htonl(port);
memcpy(data, &flag, sizeof(char));
memcpy(data+1, &nport, sizeof(u_int32_t));
int bytes_sent = send(socket_fd, data, sizeof(data), 0);
if(bytes_sent == -1) {
printf("Send error: %s (%i)\n", strerror(errno), errno);
return -1;
}
return 0;
}
int StartEnv(int port) { int StartEnv(int port) {
int socket_fd; int socket_fd;
int setup = SetupServer(&socket_fd, port); int setup = SetupServer(&socket_fd, port);
@ -49,7 +76,6 @@ int StartEnv(int port) {
bytes_received = recv(client_sock, buffer, sizeof(buffer), 0); bytes_received = recv(client_sock, buffer, sizeof(buffer), 0);
if(bytes_received < 0) { if(bytes_received < 0) {
printf("Receive Error: %s (%d)\n", strerror(errno), errno); printf("Receive Error: %s (%d)\n", strerror(errno), errno);
break;
} else if(bytes_received == 0) { } else if(bytes_received == 0) {
break; break;
} }
@ -79,6 +105,7 @@ int StartEnv(int port) {
send(client_sock, data, obs_size, 0); send(client_sock, data, obs_size, 0);
} }
} }
RemoveServer(port);
shutdown(client_sock, SHUT_RDWR); shutdown(client_sock, SHUT_RDWR);
close(client_sock); close(client_sock);
return 0; return 0;