我已经编写了一个服务器,当浏览器尝试连接到某些站点时,它会检查黑名单并发送回404,但是当我调用send()时没有错误,但是消息不会出现在Web浏览器上,除非我关闭连接?

有什么建议吗?

接受来自浏览器的连接

while(1){
    connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen);
    if (connfd == -1) {
        perror ("unable to accept");
        return 1;
    }
    printf("%s:%d connected\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
    printf("%d",threadIndex);
    pthread_create(&(thread[threadIndex++]), NULL, processRequests, (void *)connfd);

    }

Process Requests方法发送代码段:
if(blacklisted ==1){
                    printf("is blacklisted\n");
                    char *response404 = "HTTP:/1.1 404 not avaliable\r\n\r\n";

                    printf("%s\n",response404);
                    int len, bytes_sent;
                    len = strlen(response404);
                    bytes_sent = send(connfd, response404, len, 0);
                    if(len != bytes_sent){
                        perror("message length doesn't match");

                    }
            }

最佳答案

浏览器在解析并显示页面之前正在等待连接关闭。
没有办法。

注意:Keepalive技术在这里没有用,因为您要为连接到特定位置的每个客户端发送一个页面。

10-06 14:31