基于HTTP和大数运算的在线计算器

关于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) < 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值