public UnixStream Open(FileMode mode, FileAccess access, FilePermissions perms) { OpenFlags openFlags = NativeConvert.ToOpenFlags(mode, access); int num = Syscall.open(base.FullPath, openFlags, perms); if (num < 0) { UnixMarshal.ThrowExceptionForLastError(); } return(new UnixStream(num)); }
[ExpectedException(typeof(ArgumentOutOfRangeException))] // SOCK_NONBLOCK, SOCK_CLOEXEC not supported #endif public void Accept4() { WithSockets(UnixAddressFamily.AF_UNIX, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => { var address = new SockaddrUn(TempFolder + "/socket2"); if (Syscall.bind(so1, address) < 0) { UnixMarshal.ThrowExceptionForLastError(); } if (Syscall.listen(so1, 5) < 0) { UnixMarshal.ThrowExceptionForLastError(); } if (Syscall.connect(so2, address) < 0) { UnixMarshal.ThrowExceptionForLastError(); } int so3; var remote = new SockaddrUn(); if ((so3 = Syscall.accept4(so1, remote, UnixSocketFlags.SOCK_CLOEXEC | UnixSocketFlags.SOCK_NONBLOCK)) < 0) { UnixMarshal.ThrowExceptionForLastError(); } try { int _flags; if ((_flags = Syscall.fcntl(so3, FcntlCommand.F_GETFL)) < 0) { UnixMarshal.ThrowExceptionForLastError(); } var flags = NativeConvert.ToOpenFlags(_flags); Assert.IsTrue((flags & OpenFlags.O_NONBLOCK) != 0); int _flagsFD; if ((_flagsFD = Syscall.fcntl(so3, FcntlCommand.F_GETFD)) < 0) { UnixMarshal.ThrowExceptionForLastError(); } // FD_CLOEXEC must be set //var flagsFD = NativeConvert.ToFdFlags (_flagsFD); //Assert.IsTrue ((flagsFD & FdFlags.FD_CLOEXEC) != 0); Assert.IsTrue(_flagsFD != 0); } finally { if (Syscall.close(so3) < 0) { UnixMarshal.ThrowExceptionForLastError(); } } }); }
public UnixStream Open(FileMode mode) { return(this.Open(NativeConvert.ToOpenFlags(mode, FileAccess.ReadWrite))); }
public UnixStream Open(FileMode mode, FileAccess access) { return(this.Open(NativeConvert.ToOpenFlags(mode, access))); }
// TODO check this public static void CopyFromPtr(IntPtr source, PathInfo dest) { Interop.adaptor_ptrToPathInfo(source, dest); dest.flags = NativeConvert.ToOpenFlags((int)dest.flags); }