我需要在一段时间内循环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);
该程序运行良好,但是如果连接失败,我会打开和关闭许多套接字,这一事实并不能说服我。
有什么建议吗?
答案 0 :(得分:0)
我不知道如何结束这个问题,所以: 我的第二个建议是正确的。
谢谢大家的建议!