fix tun unable to close

This commit is contained in:
Kr328 committed 2019-11-21 23:58:52 +08:00
1 parent f2a0e4877a
commit 5caa778a71
2 files changed
+14 -4

No files matched your search

@@ -118,6 +118,7 @@ class ClashService : Service() {
override fun startTunDevice(fd: ParcelFileDescriptor, mtu: Int) {
try {
clash.startTunDevice(fd.fileDescriptor, mtu)
fd.close()
} catch (e: IOException) {
throw RemoteException(e.message)
}
@@ -8,10 +8,13 @@ import android.content.ServiceConnection
import android.net.VpnService
import android.os.IBinder
import android.os.ParcelFileDescriptor
import android.util.Log
import com.github.kr328.clash.core.ClashProcessStatus
class TunService : VpnService() {
companion object {
val TAG = "ClashForAndroid"
// from https://github.com/shadowsocks/shadowsocks-android/blob/master/core/src/main/java/com/github/shadowsocks/bg/VpnService.kt
private const val VPN_MTU = 1500
private const val PRIVATE_VLAN4_CLIENT = "172.19.0.1"
@@ -39,15 +42,21 @@ class TunService : VpnService() {
if ( status == null )
return
when ( status.status ) {
ClashProcessStatus.STATUS_STOPPED_INT ->
Log.d(TAG, "New clash status $status")
when ( status ) {
ClashProcessStatus.STATUS_STOPPED ->
stopSelf()
ClashProcessStatus.STATUS_STARTED_INT ->
ClashProcessStatus.STATUS_STARTED ->
clash.startTunDevice(fileDescriptor, VPN_MTU)
}
}
})
clash.start()
if ( clash.clashProcessStatus == ClashProcessStatus.STATUS_STARTED )
clash.startTunDevice(fileDescriptor, VPN_MTU)
else
clash.start()
this@TunService.clash = clash
}