现在我编写了一个C ++程序来获取具有特定URL的每个页面(就像搜索引擎的Spider程序一样),所以将这个:“GET / HTTP/1.1\r\nHost:www.163.com\r\nConnection:close\r\n\r\n
”发送给主机,但是当我recv()所有的时候来自主机的包,连接没有立即关闭。那么我现在可以用HTTP / 1.1做什么呢?
当有READ事件时,我使用epoll检查套接字。
void* NetService::epoll_process ( void* arg )
{
NetService* netservice = ( NetService* ) arg;
int nfds;
int sockfd;
for ( ; ; )
{
// return the nums of sockfds which there can be read or write now.
nfds=epoll_wait ( netservice->epollfd,netservice->events,20,200 );
//process the active sockfds
for ( int i=0; i < nfds; ++i )
{
if ( netservice->events[i].events&EPOLLIN )
{
if ( ( sockfd = netservice->events[i].data.fd ) < 0 )
continue;
netservice->recv_pkg ( sockfd );
}
}
/*there should to check all the sockfds of their timeouts;*/
if ( nfds == 0 )
{
//cout<<"**********time out***********"<<endl;
}
} //(for(;;))
close ( netservice->epollfd );
return NULL;
}
答案 0 :(得分:2)
我建议使用现有的HTTP客户端库,例如libcurl。为什么要编写自己的HTTP客户端库代码? (因为 HTTP并不那么简单,即使仅限于GET
次请求)
(这是客户端,这是你的一方,谁应该关闭连接)
Curl的网站列出了几个competitors(即替代图书馆)
答案 1 :(得分:0)
什么意味着连接没有立即关闭? recv没有返回0?我认为你的代码有问题,你可以发布代码吗?我已经使用telnet测试了www.163.com,并且连接立即关闭。
答案 2 :(得分:0)
利用Connection: Close
标题。