简单的传统的阻塞的httpclient
2015-09-25 10:10
507 查看
本例来自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; }
相关文章推荐
- libevent库的使用--定时器的使用实例
- Linux下编译安装php libevent扩展实例
- libevent 一个简单的event示例
- libevent 初始化与event_init
- libevent event_set函数与event_add函数解析 [SYM]
- libevent2 bufferevent应用示例
- 【网游服务器】Linux下libevent安装与示例
- 后续博客的方向
- 静态编译libevent
- libevent源码分析之 tail queue
- libevent安装与libevent定时器
- Archlinux使用最新版goagent的几点注意(无法上传问题)
- cocos2dx加libevent库
- libevent中evbuffer简单使用
- libevent 中bufferevent_setcb 之writecb 使用
- 在VS2010环境编译libevent-2.0.22-stable
- 了解libevent
- libevent初探
- Mac OS X 10.9 安装gevent
- libevent的使用(socket)