For the error EWOULDBLOCK try again 10 times until quitting.

This commit is contained in:
Gerhard Hoffmann 2023-08-07 13:50:59 +02:00
parent 8b66c47e49
commit ce72d3d14d

View File

@ -148,6 +148,7 @@ IsmasClient::sendRequestReceiveResponse(int port, QString const &request) {
int const bytesToWrite = strlen(request.toStdString().c_str()); int const bytesToWrite = strlen(request.toStdString().c_str());
strncpy(buf, request.toStdString().c_str(), sizeof(buf)-1); strncpy(buf, request.toStdString().c_str(), sizeof(buf)-1);
int loop = 0;
int bytesWritten = 0; int bytesWritten = 0;
while (bytesWritten < bytesToWrite) { while (bytesWritten < bytesToWrite) {
int n = ::sendto(sockfd, buf+bytesWritten, bytesToWrite-bytesWritten, 0, NULL, 0); int n = ::sendto(sockfd, buf+bytesWritten, bytesToWrite-bytesWritten, 0, NULL, 0);
@ -155,14 +156,18 @@ IsmasClient::sendRequestReceiveResponse(int port, QString const &request) {
bytesWritten += n; bytesWritten += n;
} else { } else {
if (errno == EWOULDBLOCK) { if (errno == EWOULDBLOCK) {
if (++loop < 10) {
QThread::msleep(500);
continue;
}
printErrorMessage(port, clientIP, clientPort, printErrorMessage(port, clientIP, clientPort,
QString("TIMEOUT (") + strerror(errno) + ")"); QString("WRITE TIMEOUT %1(").arg(loop) + strerror(errno) + ")");
::close(sockfd); ::close(sockfd);
return std::nullopt; return std::nullopt;
} else } else
if (errno == EINTR) { if (errno == EINTR) {
printErrorMessage(port, clientIP, clientPort, printErrorMessage(port, clientIP, clientPort,
QString("INTERRUPTED BY SIGNAL (1) (") + strerror(errno) + ")"); QString("WRITE INTERRUPTED BY SIGNAL (1) (") + strerror(errno) + ")");
continue; continue;
} }
} }
@ -177,6 +182,7 @@ IsmasClient::sendRequestReceiveResponse(int port, QString const &request) {
printInfoMessage(port, clientIP, clientPort, QString("MESSAGE SENT ") + buf); printInfoMessage(port, clientIP, clientPort, QString("MESSAGE SENT ") + buf);
loop = 0;
bzero(buf, sizeof(buf)); bzero(buf, sizeof(buf));
int bytesToRead = sizeof(buf)-1; int bytesToRead = sizeof(buf)-1;
int bytesRead = 0; int bytesRead = 0;
@ -196,8 +202,12 @@ IsmasClient::sendRequestReceiveResponse(int port, QString const &request) {
} else } else
if (n < 0) { if (n < 0) {
if (errno == EWOULDBLOCK) { if (errno == EWOULDBLOCK) {
if (++loop < 10) {
QThread::msleep(500);
continue;
}
printErrorMessage(port, clientIP, clientPort, printErrorMessage(port, clientIP, clientPort,
QString("TIMEOUT (") + strerror(errno) + ")"); QString("READ TIMEOUT %1(").arg(loop) + strerror(errno) + ")");
::close(sockfd); ::close(sockfd);
return std::nullopt; return std::nullopt;
} }