套接字并在while循环中连接调用

时间:2019-03-05 10:34:23

标签: c sockets while-loop

我需要在一段时间内循环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 :(得分:0)

我不知道如何结束这个问题,所以: 我的第二个建议是正确的。

谢谢大家的建议!