unit test_sockets; interface //type sockets const SOCK_STREAM = 1; const SOCK_DGRAM = 2; const SOCK_RAW = 3; //IP protocols const IPPROTO_IP = 0; const IPPROTO_ICMP = 1; const IPPROTO_TCP = 6; const IPPROTO_UDP = 17; const IPPROTO_RAW = 255; //IP option const IP_TTL = 2; //Address familis const AF_UNSPEC = 0; const AF_LOCAL = 1; const AF_INET = 2; const AF_INET4 = 2;//IPv4 const AF_INET6 = 10;//IPv6 const PF_UNSPEC = AF_UNSPEC; const PF_LOCAL = AF_LOCAL; const PF_INET4 = AF_INET4; const PF_INET6 = Af_INET6; // for system function 76 //... const API_ETH = 0 shl 16; const API_IPv4 = 1 shl 16; const API_ICMP = 2 shl 16; const API_UDP = 3 shl 16; const API_TCP = 4 shl 16; const API_ARP = 5 shl 16; const API_PPPOE = 6 shl 16; //Socket flags for user calls const MSG_MOFLAG = 0; const MSG_PEEK = $02; const MSG_DONTWAIT = $40; //Socket levels const SOL_SOCKET = $ffff; //Socket options const SO_BINDTODEVICE = 1 shl 9; const SO_NONBLOCK = 1 shl 31; {#DEFINE PORT(x) = x << 8}//хз работает или нет type sockaddr = record sin_family:word; sin_port:word; sin_addr:Dword; sin_zero:Qword; end; optstruct = record level:Dword; optionname:Dword; optlength:Dword; options:byte; end; var err_code:longint; //var err_code_pointer:^longint=@err_code; function socket( domain, stype, protokol:longint):longint; function close( socket:longint):longint; function bind( socket:longint; sockaddr:pointer; addres_len:longint):longint; function listen( socket, backlog:longint):longint; function connect( socket:longint; sockaddr:pointer; socket_len:longint):longint; function accept( socket:longint; sockaddr:pointer; address_len:longint):longint; function send( socket:longint; message_pointer:pointer; msg_len:longint; flag:longint):longint; function recv( socket:longint; buffer:pointer; buff_len:longint; flag:longint):longint; function setsockopt( socket:longint; opt:pointer):longint; function getsockopt( socket:longint; opt:pointer):longint; procedure socketpair( sock1, sock2:longint); implementation function socket( domain, stype, protokol:longint):longint; assembler; register; asm pushl %edx pushl %esi movl protokol,%esi movl stype,%edx movl domain,%ecx movb $0,%bl movl $75,%eax int $0x40 popl %esi popl %edx movl %ebx,err_code//? movl %eax,__RESULT end; function close( socket:longint):longint; assembler; register; asm pushl %ecx pushl %ebx movl socket,%ecx movb $1,%bl movl $75,%eax int $0x40 popl %ebx popl %ecx movl %ebx,err_code//? movl %eax,__RESULT end; function bind( socket:longint; sockaddr:pointer; addres_len:longint):longint; assembler; register; asm pushl %esi pushl %edx movl addres_len,%esi movl sockaddr,%edx movl socket,%ecx movb $2,%dl movl $75,%eax int $0x40 popl %edx popl %esi movl %ebx,err_code//? movl %eax,__RESULT end; function listen( socket, backlog:longint):longint; assembler; register; asm pushl %edx pushl %ecx movl backlog,%edx movl socket,%ecx movb $3,%bl movl $75,%eax int $0x40 popl %ecx popl %edx movl %ebx,err_code//? movl %eax,__RESULT end; function connect( socket:longint; sockaddr:pointer; socket_len:longint):longint; assembler; register; asm pushl %esi pushl %edx movl socket_len,%esi movl sockaddr,%edx movl socket,%ecx movb $4,%bl movl $75,%eax int $0x40 popl %edx popl %esi movl %ebx,err_code//? movl %eax,__RESULT end; function accept( socket:longint; sockaddr:pointer; address_len:longint):longint;assembler; register; asm pushl %esi pushl %edx movl %ecx,%esi movl %ebx,%edx movl %eax,%ecx movb $5,%bl movl $75,%eax int $0x40 popl %edx popl %esi movl %ebx,err_code end; function send( socket:longint; message_pointer:pointer; msg_len:longint; flag:longint):longint; assembler; register; asm pushal movl flag,%edi movl msg_len,%esi movl message_pointer,%edx movl socket,%ecx movb $6,%bl movl $75,%eax int $0x40 movl %ebx,err_code movl %eax,__RESULT popal end; function recv( socket:longint; buffer:pointer; buff_len:longint; flag:longint):longint; assembler; register; asm pushal movl flag,%edi movl buff_len,%esi movl buffer,%edx movl socket,%ecx movb $6,%bl movl $75,%eax int $0x40 movl %ebx,err_code movl %eax,__RESULT popal end; function setsockopt( socket:longint; opt:pointer):longint; assembler; register; asm pushl %edx pushl %ecx movl opt,%edx movl socket,%ecx movb $8,%bl movl $75,%eax int $0x40 popl %ecx popl %edx movl %ebx,err_code movl %eax,__RESULT end; function getsockopt( socket:longint; opt:pointer):longint; assembler; register; asm pushl %edx pushl %ecx movl opt,%edx movl socket,%ecx movb $9,%bl movl $75,%eax int $0x40 popl %ecx popl %edx movl %ebx,err_code movl %eax,__RESULT end; //Не реализовано procedure socketpair( sock1, sock2:longint);assembler; register; asm pushl %eax pushl %ebx movb $10,%bl movl $75,%eax int $0x40 movl %eax,sock1 movl %ebx,sock2 movl %ebx,err_code popl %ebx popl %eax end; end.