tun: linux: do not spam events every second from hack listener
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									6005c573e2
								
							
						
					
					
						commit
						c5f382624e
					
				
					 1 changed files with 17 additions and 6 deletions
				
			
		|  | @ -55,6 +55,11 @@ func (tun *NativeTun) routineHackListener() { | |||
| 	/* This is needed for the detection to work across network namespaces | ||||
| 	 * If you are reading this and know a better method, please get in touch. | ||||
| 	 */ | ||||
| 	last := 0 | ||||
| 	const ( | ||||
| 		up   = 1 | ||||
| 		down = 2 | ||||
| 	) | ||||
| 	for { | ||||
| 		sysconn, err := tun.tunFile.SyscallConn() | ||||
| 		if err != nil { | ||||
|  | @ -68,13 +73,19 @@ func (tun *NativeTun) routineHackListener() { | |||
| 		} | ||||
| 		switch err { | ||||
| 		case unix.EINVAL: | ||||
| 			if last != up { | ||||
| 				// If the tunnel is up, it reports that write() is
 | ||||
| 				// allowed but we provided invalid data.
 | ||||
| 				tun.events <- EventUp | ||||
| 				last = up | ||||
| 			} | ||||
| 		case unix.EIO: | ||||
| 			if last != down { | ||||
| 				// If the tunnel is down, it reports that no I/O
 | ||||
| 				// is possible, without checking our provided data.
 | ||||
| 				tun.events <- EventDown | ||||
| 				last = down | ||||
| 			} | ||||
| 		default: | ||||
| 			return | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue