Мне нужно сделать цикл вызова connect
через некоторое время, пока соединение на самом деле не установится.
В первый раз я написал это:
...
int sockFd;
struct sockaddr_in serverAddr;
memset(&serverAddr, '\0', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(atoi(server->port));
serverAddr.sin_addr.s_addr = inet_addr(server->ip);
if ((sockFd = socket(AF_INET, SOCK_STREAM, 0)) == -1) perror("[-] Socket error!"), exit(-1);
int checkValue;
do {
if((checkValue = connect(sockFd, (struct sockaddr*) &serverAddr, sizeof(serverAddr))) != 0) perror("[-] Connect error!");
} while (checkValue != 0);
...
Это кажется мне логичным,но когда я выполняю программу, после первой «попытки» connect
, connect
приводит к ошибке «Недопустимый аргумент», но если я перемещаю создание сокета внутри цикла, например:
int sockFd;
struct sockaddr_in serverAddr;
memset(&serverAddr, '\0', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(atoi(server->port));
serverAddr.sin_addr.s_addr = inet_addr(server->ip);
int checkValue;
do {
if ((sockFd = socket(AF_INET, SOCK_STREAM, 0)) == -1) perror("[-] Socket error!"), exit(-1);
if((checkValue = connect(sockFd, (struct sockaddr*) &serverAddr, sizeof(serverAddr))) != 0) {
close(sockFd);
}
} while (checkValue != 0);
Программа работает хорошо, но тот факт, что я открываю и закрываю так много сокетов в случае сбоя соединения, не убеждает меня.
Любой совет?