关于HTTP的具体的描述网上一大堆本文不在赘述
#include "http.h"
int starup(const char* ip,int port)
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
perror("socket");
return -1;
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(ip);
int opt = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if(bind(sock,(struct sockaddr*)&server,sizeof(server)) < 0)
{
perror("bind");
return -2;
}
if(listen(sock,10) < 0)
{
perror("listen");
return -3;
}
return sock;
}
static ssize_t Getline(int fd,char* buf,int size)
{
char c = 0;
int len = 0;
while(c != '\n' && len < size - 1)
{
ssize_t s = recv(fd,&c,1,0);
if(s > 0)
{
if('\r' == c)
{
recv(fd,&c,1,MSG_PEEK);
if('\n' == c)// \r \r\n \ra
{
recv(fd,&c,1,0);
}
else
{
c = '\n';
}
}
buf[len++]=c;
}
}
buf[len] = 0;
return len;
}
static drop_header(int fd)
{
int ret = -1;
char buf[SIZE];
do
{
ret = Getline(fd,buf,SIZE);
}while(ret > 0 && strcmp(buf,"\n"));
}
int echo_www(int fd,const char* path,int size)
{
int new_fd = open(path,O_RDONLY);
if (new_fd < 0)
{
perror("open");
print_log("open file error!",FATAL);
return 404;
}
const char* echo_line = "HTTP/1.0 200 OK\r\n";
const char* blank_line = "\r\n";
send(fd,echo_line,strlen(echo_line),0);
send(fd,blank_line,strlen(blank_line),0);
if(sendfile(fd,new_fd,NULL,size) <