Networking changes

This commit is contained in:
Pentium44 2021-05-19 16:05:24 -07:00
parent 4d6812fa40
commit e4a7299c7d
2 changed files with 47 additions and 10 deletions

View File

@ -14,7 +14,7 @@ CC ?= gcc
CFLAGS += -O2 -pedantic -g -Wall -Wextra
CPPFLAGS += -DVERSION=$(VERSION) -D_FORTIFY_SOURCE=2
#CPPFLAGS += -DVERSION=$(VERSION)
LDFLAGS += -lm
LDFLAGS += -lm -lpthread
BIN ?= slidescript
SRCS=$(wildcard src/*.c)

View File

@ -61,7 +61,7 @@ void snet_process_connection(int sockfd, char *srch, char *resp)
syn_error("ss:net:call to exit");
}
if (strncmp(srch, buff, strlen(srch)) == 0)
if (strncmp(srch, buff, strlen(srch)-1) == 0)
{
wr = write(sockfd, resp, sizeof(resp));
if(wr == -1) syn_error("ss:error:network write error!");
@ -76,7 +76,7 @@ void snet_process_connection(int sockfd, char *srch, char *resp)
/* Main netlisten function */
void snet_listen(int port, char *srch, char *resp)
{
int sockfd, connfd, length;
int sockfd, connfd, length, pid;
struct sockaddr_in servaddr;
struct sockaddr_in cliaddr;
@ -111,15 +111,26 @@ void snet_listen(int port, char *srch, char *resp)
fflush(stdout);
}
for( ; ; ) {
length = sizeof(cliaddr);
// Accept the data packet from client and verification
if((connfd = accept(sockfd, (struct sockaddr*)&cliaddr, (socklen_t*) &length)) < 0)
length = sizeof(cliaddr);
// Accept the data packet from client and verification
while ( (connfd = accept(sockfd, (struct sockaddr*)&cliaddr, (socklen_t*) &length)) )
{
if((pid = fork()) == -1)
{
syn_error("ss:error:network accept failed");
syn_warn("ss:warn:netlisten failed to fork");
close(connfd);
continue;
}
else if(pid > 0)
{
close(connfd);
continue;
}
else if(pid == 0)
{
snet_process_connection(connfd, srch, resp);
close(connfd);
}
snet_process_connection(connfd, srch, resp);
}
// After chatting close the socket
@ -163,6 +174,32 @@ void snet_toss(char *address, int port, char *string)
// If write reports -1, exit on error.
if(write(sockfd, string, strlen(string)) < 0) syn_warn("ss:warn:network, socket write error!");
while(sockfd != -1)
{
char *buf = malloc(16129);
int listener = read(sockfd, buf, sizeof(buf));
if(listener < 0)
{
syn_warn("ss:warn:nettoss, server killed socket");
free(buf);
break;
}
else if(listener > 0)
{
if(strncmp("kill", buf, 4) == 0)
{
printf("ss:net: %s called!\n", buf);
free(buf);
break;
}
printf("ss:net: %s\n", buf);
free(buf);
fflush(stdout);
}
}
// close the socket after pushing content
close(sockfd);
}