linux c select函数返回值,Linux C语言Select函数使用求解释

代码很简单,就是发送C语言发送http请求,但 i= read(sockfd, buf, BUFSIZE-1); 可以正常运行,替换为i= Read(sockfd, buf, BUFSIZE-1);后程序退出,不知什么原因,求解答。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#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;

}

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值