wirelessgateway/tcpcgi/TcpCgi.cpp

73 lines
1.9 KiB
C++
Raw Normal View History

2021-09-18 13:45:24 +08:00
#include "TcpCgi.hpp"
namespace{
LocalServer *cidwServer = LocalServer::instance();
}
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);
2024-07-09 09:49:42 +08:00
//print_info("send cgi : %s\n length = %d\n", reqData.c_str(),reqData.length());
2021-09-18 13:45:24 +08:00
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()
{
}