mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
c487f219f2
commit
6fcd0f4b14
|
@ -564,7 +564,7 @@ var
|
|||
),
|
||||
(//[101]
|
||||
sy_narg:2;
|
||||
sy_call:nil;
|
||||
sy_call:@sys_netabort;
|
||||
sy_name:'sys_netabort'
|
||||
),
|
||||
(//[102]
|
||||
|
|
|
@ -5,14 +5,15 @@ unit uipc_syscalls;
|
|||
|
||||
interface
|
||||
|
||||
function sys_socket(domain,stype,protocol:Integer):Integer;
|
||||
function sys_socketex(name:pchar;domain,stype,protocol:Integer):Integer;
|
||||
function sys_socket (domain,stype,protocol:Integer):Integer;
|
||||
function sys_socketex (name:pchar;domain,stype,protocol:Integer):Integer;
|
||||
function sys_socketclose(fd:Integer):Integer;
|
||||
function sys_bind(s:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function sys_listen(s,backlog:Integer):Integer;
|
||||
function sys_accept(s:Integer;aname,anamelen:Pointer):Integer;
|
||||
function sys_connect(fd:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function sys_setsockopt(s,level,name:Integer;val:Pointer;valsize:Integer):Integer;
|
||||
function sys_bind (s:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function sys_listen (s,backlog:Integer):Integer;
|
||||
function sys_accept (s:Integer;aname,anamelen:Pointer):Integer;
|
||||
function sys_connect (fd:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function sys_setsockopt (s,level,name:Integer;val:Pointer;valsize:Integer):Integer;
|
||||
function sys_netabort (fd,flags:Integer):Integer;
|
||||
|
||||
implementation
|
||||
|
||||
|
@ -608,6 +609,34 @@ begin
|
|||
Result:=kern_setsockopt(s,level,name,val,UIO_USERSPACE,valsize);
|
||||
end;
|
||||
|
||||
const
|
||||
SOCKET_ABORT_FLAG_RCV =$00000001;
|
||||
SOCKET_ABORT_FLAG_SND =$00000002;
|
||||
SOCKET_ABORT_FLAG_SND_AGAIN=$00000004;
|
||||
|
||||
function sys_netabort(fd,flags:Integer):Integer;
|
||||
var
|
||||
error:Integer;
|
||||
fp:p_file;
|
||||
begin
|
||||
|
||||
if ((flags and $1000000)=0) then
|
||||
begin
|
||||
error:=getsock_cap(fd, flags, @fp, nil);
|
||||
if (error=0) then
|
||||
begin
|
||||
//error:=bnet_netabort(td,fp->f_data,flags);
|
||||
fdrop(fp);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
flags:=flags and $feffffff;
|
||||
error:=0;
|
||||
//error:=kern_epollabort(td,fd,flags);
|
||||
end;
|
||||
|
||||
Exit(error);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@ function socket(domain,stype,protocol:Integer):Integer;
|
|||
function _connect(fd:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function __sys_netcontrol(fd,op:Integer;buf:Pointer;nbuf:DWORD):Integer;
|
||||
function getpriority(which,who:Integer):Integer;
|
||||
function __sys_netabort(fd,flags:Integer):Integer;
|
||||
function _bind(s:Integer;name:Pointer;namelen:Integer):Integer;
|
||||
function _setsockopt(s,level,name:Integer;val:Pointer;valsize:Integer):Integer;
|
||||
function _listen(s,backlog:Integer):Integer;
|
||||
|
@ -675,6 +676,13 @@ asm
|
|||
jmp cerror
|
||||
end;
|
||||
|
||||
function __sys_netabort(fd,flags:Integer):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $101,%rax
|
||||
call fast_syscall
|
||||
jmp cerror
|
||||
end;
|
||||
|
||||
function _bind(s:Integer;name:Pointer;namelen:Integer):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $104,%rax
|
||||
|
|
Loading…
Reference in New Issue