This commit is contained in:
Pavel 2025-02-04 11:40:17 +03:00
parent c487f219f2
commit 6fcd0f4b14
3 changed files with 45 additions and 8 deletions

View File

@ -564,7 +564,7 @@ var
),
(//[101]
sy_narg:2;
sy_call:nil;
sy_call:@sys_netabort;
sy_name:'sys_netabort'
),
(//[102]

View File

@ -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.

View File

@ -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