#include "tcp_cgi.hpp" TcpCgi::TcpCgi() { print_light_green("TcpCgi Init\n"); } void TcpCgi::startCgiServer() { int listenfd, connfd; int mw_optval = 1; struct sockaddr_in servaddr; char buff[40960]; int n; if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("create socket error: %s(errno: %d)\n", strerror(errno), errno); return; } setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&mw_optval, sizeof(mw_optval)); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(7305); if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) { printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno); return; } if (listen(listenfd, 10) == -1) { printf("listen socket error: %s(errno: %d)\n", strerror(errno), errno); return; } while (1) { if ((connfd = accept(listenfd, (struct sockaddr *)NULL, NULL)) == -1) { printf("accept socket error: %s(errno: %d)", strerror(errno), errno); continue; } n = recv(connfd, buff, 40960, 0); if (n <= 0) { print_info("recv fail\n"); close(connfd); } else { buff[n] = '\0'; std::string recvData = std::string(buff); std::string reqData = cidwServer->HandleCgi_cmd(recvData); // print_info("send cgi : %s\n length = %d\n", reqData.c_str(),reqData.length()); if (send(connfd, reqData.c_str(), reqData.length(), 0) < 0) { printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); } close(connfd); } } close(listenfd); return; } TcpCgi::~TcpCgi() {}