我很难解决这个问题 - 我正在尝试编写一个与Linux隧道驱动程序交互的程序.在最基本的层面上,我只想创建一个能够通过网络隧道传输数据的应用程序.但是,我完全不知道如何正确设置隧道驱动程序以实现此目的.
我在Ubuntu 9.04上开发,我加载了隧道驱动程序内核模块.
存在设备/dev/net/tun,但是没有/dev/tunX设备.我无法使用创建这些设备ifconfig- /sbin/ifconfig tun0 up例如,每当我运行时,我都会收到以下错误:
获取接口标志时的tun0:ERROR:没有这样的设备.
如果我尝试查看/dev/net/tun设备,则会出现以下错误:
cat:/ dev/net/tun:文件描述符处于错误状态.
尝试/dev/tunX通过一个小程序打开,基本上,简单
tun_fd = open( "/dev/tun0", O_RDWR )
Run Code Online (Sandbox Code Playgroud)
返回-1:应用程序以root身份运行,但仍无法打开此隧道设备.可以打开/dev/net/tun,但这似乎不会生成/dev/tunX要使用的新设备.
总而言之 - 如何编写希望使用Linux隧道驱动程序的应用程序?任何见解将不胜感激.
谢谢; 〜罗伯特
我正在使用典型的套接字API在Linux平台上用C++编写网络应用程序,我正在研究将字节数组写入TCP流的两种替代方法:通过调用write()或调用send( ).我知道,因为这是Linux,套接字句柄只是一个文件描述符,因此在套接字上执行read()和write()调用是有效的,但套接字API也提供了send()和recv( )执行相同任务的功能.
因此,我想知道是否有任何特殊原因选择一类功能而不是另一类功能 - 是针对网络写入/读取优化的发送/接收功能,它们是否表现更好等等?或者我使用哪些功能真的是武断的?read()和write()在所有情况下都能正常运行吗?
感谢您的任何见解!