[英]How to add server connection timeout using select()?
我想添加超时以连接到服务器,因为如果服务器关闭,我的应用程序将停止工作并开始等待服务器回复 1 分钟。 我想在固定时间后停止尝试连接到服务器。 他们说我应该使用 select(),但我不明白如何将它集成到下面的代码中:
int client;
bool isExit = false;
int fileSize = 0;
int size = 0;
int bufsize = 1024;
char buffer[bufsize];
string fileEnd = "<EOF>";
string modelFolder = currentModelFolder;
replace(modelFolder.begin(),
modelFolder.end(),
';',
'/');
string requestStructure = modelFolder + "/" + currentFileName + "/" + fileEnd + "|" + '\0';
char *bytes = new char[requestStructure.length()];
memcpy(bytes, requestStructure.data(), requestStructure.length());
sockaddr_in server_addr;
client = socket(AF_INET, SOCK_STREAM, 0);
if (client < 0)
{
cout << "Error establishing socket..." << endl;
exit(1);
}
else
cout << "Socket client has been created..." << endl;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(serverPort);
inet_aton(serverIp.c_str(), &server_addr.sin_addr);
if (connect(client, (struct sockaddr *)&server_addr, sizeof(server_addr)) == 0)
{
cout << "=> Connection to the server port number: " << serverPort << endl;
}
// отправка запроса на сервер (сервер, данные, размер пакета)
send(client, bytes, bufsize, 0);
cout << "=> Awaiting confirmation from the server..." << endl;
// получение данных с сервера (сервер, массив байтов, размер пакета)
recv(client, buffer, bufsize, 0);
cout << "Buffer = " << buffer << endl;
int bufferStringSize = sizeof(buffer);
string bufferSize = convertToString(buffer, bufferStringSize);
stringstream stringToIntStream;
stringToIntStream << bufferSize;
stringToIntStream >> fileSize;
ostringstream stepFilePathStructure;
stepFilePathStructure << saveFolderPath << currentFileName << "";
string stepFilePath = stepFilePathStructure.str();
remove(stepFilePath.c_str());
ofstream stepFile;
stepFile.open(stepFilePath);
while (size < fileSize)
{
int received = recv(client, buffer, bufsize, 0);
stepFile.write(buffer, received);
size += received;
}
close(client);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.