208943a63d7d5620b78217bb5593e9a17335d858 galt Mon Feb 6 17:59:56 2023 -0800 Problems found with newer gcc on Ubunto 20, compiled on a vm. diff --git src/lib/net.c src/lib/net.c index e202e21..baa3a02 100644 --- src/lib/net.c +++ src/lib/net.c @@ -111,36 +111,37 @@ int res; res = connect(sd, address->ai_addr, address->ai_addrlen); char ipStr[NI_MAXHOST]; getAddrAsString6n4((struct sockaddr_storage *)address->ai_addr, ipStr, sizeof ipStr); if (res < 0) { if (errno == EINPROGRESS) { struct timeval startTime; gettimeofday(&startTime, NULL); struct timeval remainingTime; remainingTime.tv_sec = (long) (msTimeout/1000); remainingTime.tv_usec = (long) (((msTimeout/1000)-remainingTime.tv_sec)*1000000); while (1) { - fd_set mySet; + fd_set mySet, exceptSet; FD_ZERO(&mySet); FD_SET(sd, &mySet); + exceptSet = mySet; // use tempTime (instead of using remainingTime directly) because on some platforms select() may modify the time val. struct timeval tempTime = remainingTime; - res = select(sd+1, NULL, &mySet, &mySet, &tempTime); + res = select(sd+1, NULL, &mySet, &exceptSet, &tempTime); if (res < 0) { if (errno == EINTR) // Ignore the interrupt { // Subtract the elapsed time from remaining time since some platforms need this. struct timeval newTime; gettimeofday(&newTime, NULL); struct timeval elapsedTime = tvMinus(newTime, startTime); remainingTime = tvMinus(remainingTime, elapsedTime); if (remainingTime.tv_sec < 0) // means our timeout has more than expired { remainingTime.tv_sec = 0; remainingTime.tv_usec = 0; } startTime = newTime;