Сокет и подключение вызова в то время как цикл - PullRequest
0 голосов
/ 05 марта 2019

Мне нужно сделать цикл вызова 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);

Программа работает хорошо, но тот факт, что я открываю и закрываю так много сокетов в случае сбоя соединения, не убеждает меня.

Любой совет?

1 Ответ

0 голосов
/ 12 марта 2019

Я не знаю, как закрыть этот вопрос, поэтому: мое второе предложение верно.

Спасибо всем за предложения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...