//
// Created by xx on 2020/4/10.
//
#include "mySocketConnectTimeOut.h"
int socket_connect_timeout(char *ip, int port){
int sock_fd;
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(ip);
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("socket");
return -1;
}
printf("socket create!\n");
int res = connect(sock_fd, (struct sockaddr *)&server, sizeof(server));
if(res < 0){
perror("connect");
return -1;
}
fd_set rset, wset;
int error;
socklen_t len;
FD_ZERO(&rset);
FD_SET(sock_fd, &rset);
FD_ZERO(&wset);
FD_SET(sock_fd, &wset);
struct timeval interval;
interval.tv_sec = 5;
interval.tv_usec = 0;
int n = select(sock_fd + 1, &rset, &wset, NULL, &interval);
if(n < 0){
perror("select");
return -1;
}
if(FD_ISSET(sock_fd, &rset) || FD_ISSET(sock_fd, &wset)){
len = sizeof(error);
int flag;
if((flag = getsockopt(sock_fd, SOL_SOCKET, SO_ERROR, &error, &len)) != 0){
perror("getsockopt");
return -1;
}
} else{
printf("connect no response!\n");
return -1;
}
return sock_fd;
}
select監聽socket的connect編程實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.