| 
					
				 | 
			
			
				@@ -589,16 +589,20 @@ void WindowsEthernetTap::threadMain() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Utils::snprintf(tapPath,sizeof(tapPath),"\\\\.\\Global\\%s.tap",_netCfgInstanceId.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	int prevTapResetStatus = _systemTapResetStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	bool throwOneAway = true; // "Power cycle" the network port once on startup, because Windows... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool throwOneAway = true; // Restart once on startup, because Windows. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool powerCycle = true; // If true, "power cycle" the device, because Windows. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	while (_run) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		_disableTapDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		_enableTapDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (powerCycle) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_disableTapDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_enableTapDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_tap = CreateFileA(tapPath,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED,NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (_tap == INVALID_HANDLE_VALUE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fprintf(stderr,"Error opening %s -- retrying.\r\n",tapPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			powerCycle = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -700,6 +704,7 @@ void WindowsEthernetTap::threadMain() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		bool writeInProgress = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		while (_run) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ((prevTapResetStatus != _systemTapResetStatus)||(throwOneAway)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				powerCycle = throwOneAway; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				throwOneAway = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				prevTapResetStatus = _systemTapResetStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				break; // this will cause us to close and reopen the tap 
			 |