Я пишу приложение VPN, когда я использую Java, все в порядке. но когда я использую собственный код c ++, он отправляет на мой удаленный хост в порядке, а также может получить пакет. Но кажется, что не могу писать в Tun FD. что я не прав?
//has problem
public int onStartCommand(Intent intent, int flags, int startId)
{
Builder builder = new Builder();
builder.setSession("MyVPNService");
builder.addAddress("192.168.1.94", 24);
builder.addDnsServer("8.8.8.8");
builder.addRoute("0.0.0.0", 0);
mInterface = builder.establish();
final int fd = mInterface.getFd();
//final int fd = mInterface.detachFd(); //no use
int clientFd = getClientFd();
protect(clientFd);
new Thread(new Runnable() {
@Override
public void run() {
int re = sendFd(fd);
}
}).start();
return START_STICKY;
}
//my native code
if(events_in[i].data.fd == client_fd && events_in[i].events & EPOLLIN)
{
struct sockaddr_in src = { 0 };
socklen_t len = sizeof(struct sockaddr);;
memset(buf, 0, MAX_BKG_LEN);
int n = recvfrom(client_fd, buf, MAX_BKG_LEN, 0, (struct sockaddr*)&src, &len);
write(fd, buf, n); //Did I wrong?
}