简单的CGI服务器

2019-04-15 18:06发布

CGI服务器主要是通过把服务器本地标准输入,输出或者文件重定向到网络连接中,这样我们就能够通过向标准输入,输出缓冲区中发送信息,达到在网络连接中发送信息的效果.,(简单理解。。。。)
这里主要注意点是我们要进行fflush(),通过dup进行重定向
cgi.c #include #include #include #include #include #include #include #define LISTENQ 100 int main(int argc,char** argv) { if (argc != 2) { printf("please add "); return 1; } int sockfd; if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) { printf("socket error: %s ",strerror(errno)); return 1; } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(atoi(argv[1])); if (bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0) { printf("bind error: %s ",strerror(errno)); return 1; } if (listen(sockfd,LISTENQ) < 0) { printf("listen error: %s ",strerror(errno)); return 1; } int connfd; for ( ; ;) { if ((connfd = accept(sockfd,NULL,NULL)) < 0) { if (errno == EINTR) { continue; } printf("accept error: %s ",strerror(errno)); return 1; } int ret = close(STDOUT_FILENO); if (ret < 0) { printf("close error: %s",strerror(errno)); exit(1); } if (dup(connfd) < 0) { printf("dup error: %s ",strerror(errno)); return 1; } printf("which is server send by STDOUT_FILENO "); fflush(stdout); close(connfd); } return 0; } 通过telnet测试: 这里写图片描述