- 论坛徽章:
- 0
|
10可用积分
我写了一个客户端代码,想要让socket具有非阻塞的特性,然后去不断的尝试connect.
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
int main(void){
int s,r,ret;
char buf[20];
struct sockaddr_in sock;
s=socket(AF_INET,SOCK_STREAM,0);
if(-1==s){
printf("socket() failed\n");
return 1;
}
if(0>fcntl(s,F_SETFL,fcntl(s,F_GETFL,0)|O_NDELAY|O_NONBLOCK)){
printf("set_fl failed\n");
return 1;
}
sock.sin_family=PF_INET;
sock.sin_port =htons(10080);
sock.sin_addr.s_addr=htons(INADDR_ANY);
while(1){
if(-1==connect(s,(struct sockaddr*)&sock,sizeof(struct sockaddr_in))){
if(EINPROGRESS!=errno){
printf("connect() failed:%s\n",strerror(errno));
return 1;
}else{
printf("in wait\n");
continue;
}
}
}
if(-1==(ret=read(s,buf,sizeof(buf)))){
printf("read() failed\n");
return 1;
}
buf[ret-1]='\0';
printf("read:%s\n",buf);
close(s);
return 0;
}
但是,程序启动以后,立刻失败退出了,没有达到我的预期
$ gcc client.c && ./a.out
in wait
connect() failed:Connection refused
这是为什么呢? 望dx不吝赐教。
谢谢。 |
最佳答案
查看完整内容
非阻塞connect之后,用select判断该套接字可写,可写表示连接成功
|