A
Athanasios
Hi everyone,
I am trying to open the /dev/net/tun character device with perl.
In C, I would issue:
open("/dev/net/tun", O_RDWR)
and continue as usual.
However, when I try to use sysopen in perl like
sysopen(TUNNELDEV, "/dev/net/tun", O_RDWR);
from the strace (truss) output I can see that instead it tries to do:
open("/dev/net/tun", O_RDWR|O_LARGEFILE)
which for some VERY strange reason succeeds but the file descriptor is
left in a bad state, so it is really unusable. For anything I try to do
afterwards, I get a
EBADFD (File descriptor in bad state).
As I have come down to the systel call level, there is no other reason
for this problem that I can think of except the O_LARGEFILE flag.
Indeed, a simple C program works quite fine without that flag.
I also have tried to use POSIX:pen but it still adds the flag.
The documentation clearly states that from perl 5.6 and forth, the
O_LARGEFILE will be used whenever possible. But I really need to bypass
this and generate an open system call without it.
Does anyone know any conceivable way to accomplish this? Any help will
be appreciated.
If I should take this question to another group or list more suitable
to get an answer, could you also please indicate that group?
Kind Regards,
Athanasios
(I know, I know, the tun/tap driver may be slightly broken in the
strict sense, but let's leave that outside for a moment.)
I am trying to open the /dev/net/tun character device with perl.
In C, I would issue:
open("/dev/net/tun", O_RDWR)
and continue as usual.
However, when I try to use sysopen in perl like
sysopen(TUNNELDEV, "/dev/net/tun", O_RDWR);
from the strace (truss) output I can see that instead it tries to do:
open("/dev/net/tun", O_RDWR|O_LARGEFILE)
which for some VERY strange reason succeeds but the file descriptor is
left in a bad state, so it is really unusable. For anything I try to do
afterwards, I get a
EBADFD (File descriptor in bad state).
As I have come down to the systel call level, there is no other reason
for this problem that I can think of except the O_LARGEFILE flag.
Indeed, a simple C program works quite fine without that flag.
I also have tried to use POSIX:pen but it still adds the flag.
The documentation clearly states that from perl 5.6 and forth, the
O_LARGEFILE will be used whenever possible. But I really need to bypass
this and generate an open system call without it.
Does anyone know any conceivable way to accomplish this? Any help will
be appreciated.
If I should take this question to another group or list more suitable
to get an answer, could you also please indicate that group?
Kind Regards,
Athanasios
(I know, I know, the tun/tap driver may be slightly broken in the
strict sense, but let's leave that outside for a moment.)