【发布时间】:2012-02-27 09:19:17
【问题描述】:
我编写了一个服务器,当浏览器尝试连接到某些站点时,它会检查黑名单并发送回 404,但是当我调用 send() 时没有错误但消息不会出现在网络上浏览器,除非我关闭连接?
有什么建议吗?
接受来自浏览器的连接
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 方法发送 sn -p:
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");
}
}
【问题讨论】:
-
在第 42 行检查您的意思是
i而不是j。 -
不应该每个线程都有自己的
connfd副本吗?看起来在您的代码中它们都共享同一个变量。 -
尝试在您的回复中添加“content-length: 0”或另一个 \r\n。在您关闭连接之前它不会显示,因为它仍在等待消息内容。
-
看看其他例子,我认为我处理 connfd 和线程的方式是正确的?
-
我尝试添加这些,似乎没有用
标签: c sockets networking