tftpd.c: Follow up cleanup and restore of previous sockopt
authorMarc Hoersken <info@marc-hoersken.de>
Sat, 6 Apr 2013 15:18:13 +0000 (17:18 +0200)
committerMarc Hoersken <info@marc-hoersken.de>
Sat, 6 Apr 2013 15:18:41 +0000 (17:18 +0200)
tests/server/tftpd.c

index 012e209..bfb7d58 100644 (file)
@@ -1196,8 +1196,8 @@ static void sendtftp(struct testcase *test, struct formats *pf)
  */
 static void recvtftp(struct testcase *test, struct formats *pf)
 {
-#if USE_WINSOCK
-  DWORD recvtimeout;
+#ifdef USE_WINSOCK
+  DWORD recvtimeout, recvtimeoutbak;
 #endif
   ssize_t n, size;
   recvblock = 0;
@@ -1269,13 +1269,16 @@ send_ack:
 #endif
   /* normally times out and quits */
 #ifdef USE_WINSOCK
+  recvtimeout = sizeof(recvtimeoutbak);
+  getsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
+             (char*)&recvtimeoutbak, (int*)&recvtimeout);
   recvtimeout = 10;
   setsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
              (const char*)&recvtimeout, sizeof(recvtimeout));
 #endif
   n = sread(peer, &buf.storage[0], sizeof(buf.storage));
 #ifdef USE_WINSOCK
-  recvtimeout = 0;
+  recvtimeout = recvtimeoutbak;
   setsockopt(peer, SOL_SOCKET, SO_RCVTIMEO,
              (const char*)&recvtimeout, sizeof(recvtimeout));
 #endif