本例来自libevent官网,有一点小小的改动(把google改成了baidu)
#include<netinet/in.h>
#include<sys/socket.h>
#include<netdb.h>
#include<assert.h>
#include<unistd.h>
#include<string.h>
#include<stdio.h>
int main(int argc,char* argv[])
{
const char query[]=
"GET / HTTP/1.0\r\n"
"Host:www.baidu.com\r\n"
"\r\n";
const char hostname[]="www.baidu.com";
struct sockaddr_in sin;
struct hostent* h;
const char* cp;
int fd;
int n_written,remaining;
char buf[1024];
h=gethostbyname(hostname);
assert(h!=0);
if(h->h_addrtype!=AF_INET)
{
fprintf(stderr,"no ipv6 support,sorry.");
return 1;
}
fd=socket(AF_INET,SOCK_STREAM,0);
assert(fd>=0);
sin.sin_family=AF_INET;
sin.sin_port=htons(80);
sin.sin_addr=*(struct in_addr*)h->h_addr;
int ret=connect(fd,(struct sockaddr*)&sin,sizeof(sin));
assert(ret!=-1);
cp=query;
remaining=strlen(query);
while(remaining)
{
n_written=send(fd,cp,remaining,0);
assert(n_written>0);
remaining-=n_written;
cp+=n_written;
}
while(1)
{
int result=recv(fd,buf,sizeof(buf),0);
if(result==0)
{
break;
}
else if(result<0)
{
perror("recv");
close(fd);
return 1;
}
fwrite(buf,1,result,stdout);
}
close(fd);
return 0;
}