如果客户端想连接一个服务器端,但是不能肯定服务器端是否存在,如果存在了是否能连上,怎么判断呢?
connect函数的默认行为是阻塞的,会一直等待在那里。为了判断各种情况,以及遇到错误时结束连接,我们需要使用非阻塞的socket。一个例子程序:
#include
#include
#include
#include
#include
#include
#include
#include
int main(void){
int s,r,ret,len,error;
char buf[20];
struct sockaddr_in sock;
fd_set rset,wset;
struct timeval tv;
tv.tv_sec=10;
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_NONBLOCK)){
printf("fcntl failed/n");
return 1; }
sock.sin_family=PF_INET;
sock.sin_port =htons(10080);
sock.sin_addr.s_addr=inet_addr("197.0.0.9");
if(-1==(ret