D4 Http服务器 Posix API

D4 Http服务器  Posix API
Http服务器接收报文和分析int http_request(struct conn *c) { printf(request: %s\n, c-rbuffer); //分析 //... memset(c-wbuffer, 0, BUFFER_LENGTH); c-wlength 0; c-status 0; }回复报文和资源int http_response(struct conn *c) { int filefd open(index.html, O_RDONLY); struct stat stat_buf; fstat(filefd, stat_buf); if (c-status 0) { c-wlength sprintf(c-wbuffer, HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n Accept-Ranges: bytes\r\n Content-Length: %ld\r\n Date: Tue, 30 Apr 2024 13:16:46 GMT\r\n\r\n, stat_buf.st_size); c-status 1; } else if (c-status 1) { int ret sendfile(c-fd, filefd, NULL, stat_buf.st_size); if (ret -1) { printf(errno: %d\n, errno); } c-status 2; } else if (c-status 2) { c-wlength 0; memset(c-wbuffer, 0, BUFFER_LENGTH); c-status 0; } close(filefd); return c-wlength; }先回复http头再回复资源这样需要两次触发写事件通过状态标status识实现Posix Api网络编程部分在头文件sys/socket.hnetinet/in.h中一套定义应用程序与操作系统之间接口的标准规范目的是保证源代码在不同类 Unix 系统上具有良好的可移植性。主要接口建立连接三次握手状态迁移tcp报文头中的标识SYN,ACK ​​​​​​​半连接全连接建立。客户端卡buf不发送第三次握手的确认帧导致半连接队列很多就是SYN泛洪建立socket fd位图置位为已用alloc tcb绑定地址ipportlisten开启监听发送连接申请connect接收连接accept分配fdfd映射到对应tcb传输连接recvsend本质拷贝拥塞控制发送方根据超时、反复收到相同确认帧判断网络是否拥堵。滑动窜口mtu关闭连接四次挥手双方close发送FIN后未收到ACK却收到FIN变为CLOSING状态P2P文章参考与零声教育的C/Clinux服务期高级架构系统教程学习:链接