Ejemplo n.º 1
0
        private static int Socket(Thread current, ref Arch.ExceptionRegisters regs, int domain, int type, int protocol)
        {
            var proc = current.Parent;

            Arch.IPCStubs.SocketAsync(proc.helperPid, current.impl._value.thread._value, domain, type, protocol);

            var completion = new SocketCompletion(current);

            Globals.CompletionQueue.Enqueue(completion);
            current.SaveState(ref regs);
            current.AsyncReturn = true;
            return(0);
        }
Ejemplo n.º 2
0
        public static void HandleSocketCompletion(SocketCompletion c, int ret)
        {
            var current = c.thr;

            if (ret < 0)
            {
                current.ReturnFromCompletion(ret);
                return;
            }

            var proc = current.Parent;

            var inode = new SocketINode(ret, proc.helperPid);
            var file  = new File(proc, inode, FileFlags.ReadWriteMask, 0);

            var fd = proc.GetUnusedFd();

            proc.InstallFd(fd, file);
            current.ReturnFromCompletion(fd);
        }
Ejemplo n.º 3
0
        private static int Socket(Thread current, ref Arch.ExceptionRegisters regs, int domain, int type, int protocol)
        {
            var proc = current.Parent;
            Arch.IPCStubs.SocketAsync(proc.helperPid, current.impl._value.thread._value, domain, type, protocol);

            var completion = new SocketCompletion(current);

            Globals.CompletionQueue.Enqueue(completion);
            current.SaveState(ref regs);
            current.AsyncReturn = true;
            return 0;
        }
Ejemplo n.º 4
0
        public static void HandleSocketCompletion(SocketCompletion c, int ret)
        {
            var current = c.thr;
            if (ret < 0)
            {
                current.ReturnFromCompletion(ret);
                return;
            }

            var proc = current.Parent;

            var inode = new SocketINode(ret, proc.helperPid);
            var file = new File(proc, inode, FileFlags.ReadWriteMask, 0);

            var fd = proc.GetUnusedFd();
            proc.InstallFd(fd, file);
            current.ReturnFromCompletion(fd);
        }