linux c select函数使用求解释
代码非常easy,就是发送c语言发送http请求。但 i= read(sockfd, buf, BUFSIZE-1); 能够正常执行,
替换为i= Read(sockfd, buf, BUFSIZE-1);后程序退出,不知什么原因,求解答。
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h> #define IPSTR "180.97.33.107"
#define PORT 80
#define BUFSIZE 1024 * 1024 * 2 int Read(int fd, char *buf, int count) {
int nread, totlen = 0; while (totlen != count) {
nread = read(fd, buf, count - totlen);
if (nread == 0)
return totlen;
if (nread == -1)
return -1;
totlen += nread;
buf += nread;
}
return totlen;
} int main(int argc, char **argv)
{
int sockfd, ret, i, h;
struct sockaddr_in servaddr;
char str1[4096], buf[BUFSIZE];
socklen_t len;
fd_set t_set1;
struct timeval tv; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
printf("---socket error!\n");
exit(0);
}; bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
if (inet_pton(AF_INET, IPSTR, &servaddr.sin_addr) <= 0 ){
printf("--inet_pton error!\n");
exit(0);
}; if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
printf("connect error!\n");
exit(0);
} memset(str1, 0, 4096);
strcat(str1, "GET / HTTP/1.1\n");
strcat(str1, "Host: www.baidu.com\n");
strcat(str1, "\n\n");
printf("%s",str1); ret = write(sockfd,str1,strlen(str1));
if (ret < 0) {
printf("errno = %d strerror = %s\n",errno, strerror(errno));
exit(0);
}else{
printf("send %d size\n", ret);
} FD_ZERO(&t_set1);
FD_SET(sockfd, &t_set1); while(1){
tv.tv_sec= 2;
tv.tv_usec= 0;
h= 0;
printf("--------------->1\n");
h= select(sockfd +1, &t_set1, NULL, NULL, &tv);
printf("--------------->2\n"); printf("h =================== %d\n", h);
//if (h == 0) continue;
if (h < 0) {
close(sockfd);
printf("select error \n");
return -1;
} if (h > 0){
memset(buf, 0, BUFSIZE);
i= read(sockfd, buf, BUFSIZE-1);
//i= Read(sockfd, buf, BUFSIZE-1);
printf("i ========================== %d", i);
if (i==0){
close(sockfd);
printf("stop .................\n");
return -1;
}
printf("%s\n", buf);
}
}
close(sockfd);
return 0;
}
linux c select函数使用求解释的更多相关文章
- linux select函数:Linux下select函数的使用详解【转】
本文转载自;http://www.bkjia.com/article/28216.html Linux下select函数的使用 Linux下select函数的使用 一.Select 函数详细介绍 Se ...
- Linux下select函数的使用
一.Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv ...
- Linux驱动 - select函数介绍
一.select 函数介绍 select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: #include & ...
- 转:linux中select()函数分析
源地址:http://blog.csdn.net/zi_jin/article/details/4214359 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱 ...
- Linux C select函数详解
select IO复用机制: http://www.cnblogs.com/hjslovewcl/archive/2011/03/16/2314330.html http://blog.csdn.ne ...
- linux select函数详解
linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...
- socket通信时如何判断当前连接是否断开--select函数,心跳线程,QsocketNotifier监控socket
client与server建立socket连接之后,如果突然关闭server,此时,如果不在客户端close(socket_fd),会有不好的影响: QsocketNotifier监控socket的槽 ...
- linux select函数详解【转】
转自:http://www.cnblogs.com/ccsccs/articles/4224253.html 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数 ...
- linux c语言 select函数用法
linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...
随机推荐
- JavaScript中如何检测一个变量是一个String类型?请写出函数实现
方法1. function isString(obj){ return typeof(obj) === "string"? true: false; // returntypeof ...
- Oracle11g口令过期的解决
今天发现服务器上的Oracle11g突然登录不上去了,提示ORA-28002错误,说是口令过期. 1. 用DBA账户登录SQL PLUS.我用的是SYS. 2. 系统会提示口令失效,但是会马上让你重置 ...
- hihocoder第233周
题目链接 题目描述 给定一个数组a[N],N小于1e5.把数组划分成若干个片段,每个片段的和都不为0,问有多少种划分方法? 方法描述 定义f(i)表示0~i共有多少种划分方式,则$f(j)=\sum_ ...
- Apache+PHP配置PATHINFO的一个小问题
使用ThinkPHP示例,设置'URL_MODEL' => 2,发现提示: No input file specified 应该是PATHINFO配置的问题,试 ...
- 【DeepLearning】Exercise:Softmax Regression
Exercise:Softmax Regression 习题的链接:Exercise:Softmax Regression softmaxCost.m function [cost, grad] = ...
- Linux中tomcat启动很慢,SessionIdGeneratorBase.createSecureRandom耗时5分钟
通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊. 原文参见:http://blog.csdn.NET ...
- java WSDL接口webService实现方式
一.使用JDK生成WSDL的对象类 1.cmd进入JDK的bin文件中 执行命令 wsimport -keep -p com.demo.client http://localhost:8080/Dem ...
- 【MySQL】MySQL存储过程介绍
目录结构: contents structure [-] 存储过程简介 关于MySQL的存储过程 MySQL存储过程的创建 格式 声明分割符 参数 变量 注释 MySQL存储过程的调用 MySQL存储 ...
- 【Android】Android六种布局详解
这篇就对LinearLayout.RelativeLayout.自定义ViewGroup.FrameLayout.TableLayout.AbsoluteLayout六种布局进行详细的讲解. 1.Li ...
- python学习笔记——爬虫学习中的重要库urllib
1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...