I'm trying to write a web server but with the code I have but I'm getting the GET/ht.html can't be opened. The html document (ht.html) is supposed to be opened in the browser. What can be added or changed so it'll work properly?
The code I have is:
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <errno.h>
#define SERVER_PORT 12345 /* arbitrary, but client and server must agree */
#define BUF_SIZE 4096 /* block transfer size */
#define QUEUE_SIZE 10
#define PATH 128
int main(int argc, char *argv[])
{
int s, b, l, fd, sa, bytes, on = 1;
char buf[BUF_SIZE]; /* buffer for outgoing file */
struct sockaddr_in channel; /* hold's IP address */
/* Build address structure to bind to socket. */
memset(&channel, 0, sizeof(channel)); /* zero channel */
channel.sin_family = AF_INET;
channel.sin_addr.s_addr = htonl(INADDR_ANY);
channel.sin_port = htons(SERVER_PORT);
/* Passive open. Wait for connection. */
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* create socket */
if (s < 0) fatal("socket failed");
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on));
b = bind(s, (struct sockaddr *) &channel, sizeof(channel));
if (b < 0) fatal("bind failed");
l = listen(s, QUEUE_SIZE); /* specify queue size */
if (l < 0) fatal("listen failed");
/* Socket is now set up and bound. Wait for connection and process it. */
while(1)
{
sa = accept(s, 0, 0); /* block for connection request */
if(fork())
{
close(sa)
}
else
{
int n=0, i=0;
char filename[PATH];
FILE*fd=NULL;
char err_msg[] = "Could not open";
char newline[] = "\n";
close(s);
while((n=read(sa, &filename[i], (PATH - i)))>0)
{
i+=n;
}
filename[i]='\0';
if(!(fd=fopen(filename, "r")))
{
write(sa, err_msg, strlen(err_msg));
write(sa, filename, strlen(filename));
write(sa, newline, strlen(newline));
exit(EXIT_FAILURE);
}
while((write(sa, recvline, fread(recvline, sizeof(char), MAXLINE, fd))))
{
}
fclose(fd);
close(sa);
}
}
}
fatal(char *string)
{
printf("%s", string);
exit(1);
}