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); }
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); }
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; }