Networking changes
This commit is contained in:
parent
4d6812fa40
commit
e4a7299c7d
2
Makefile
2
Makefile
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user