For the error EWOULDBLOCK try again 10 times until quitting.
This commit is contained in:
		@@ -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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user