⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tun.c

📁 本人收集整理的一份c/c++跨平台网络库
💻 C
字号:
#include <stdio.h>#include <string.h>#include <fcntl.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <netinet/ip.h>#include <netinet/tcp.h>#include <net/if.h>#include <linux/if_tun.h>extern int debug;inttun_open(char *dev) {	struct ifreq ifr;	int fd, err;	if( (fd = open("/dev/net/tun", O_RDWR)) < 0 )		return fd;	memset(&ifr, 0, sizeof(ifr));	ifr.ifr_flags = IFF_TUN | IFF_NO_PI;	if( dev )		strncpy(ifr.ifr_name, dev, IFNAMSIZ);	else		dev = malloc(sizeof(ifr.ifr_name));	if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){		close(fd);		return err;	}	if (debug) printf("dev: %s\n", dev);	strcpy(dev, ifr.ifr_name);	return fd;}inttun_close(int fd) {	return close(fd);}inttun_write(int fd, char *buf, int len) {	register int t=0, w;	while ( len > 0) {		if( (w = write(fd, buf, len)) < 0 ){			if( errno == EINTR || errno == EAGAIN )				continue;			return -1;		}	  		if( !w )			return 0;	  len -= w; buf += w; t += w;	}	return t;}inttun_read(int fd, char *buf, int len) {    return read(fd, buf, len);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -