unixsock.inc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. {$Id$}
  2. {******************************************************************************
  3. Basic Socket Functions
  4. ******************************************************************************}
  5. Function socket(Domain,SocketType,Protocol:Longint):Longint;
  6. begin
  7. Socket:=Do_Syscall(syscall_nr_socket,Domain,SocketType,Protocol);
  8. end;
  9. Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
  10. begin
  11. Send:=do_syscall(syscall_nr_sendto,Sock,Longint(@Buf),BufLen,Flags,0,0);
  12. end;
  13. Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
  14. begin
  15. Sendto:=do_syscall(syscall_nr_Sendto,Sock,Longint(@Buf),BufLen,Flags,Longint(@Addr),AddrLen);
  16. end;
  17. Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
  18. begin
  19. Recv:=do_syscall(syscall_nr_Recvfrom,Sock,Longint(@Buf),BufLen,Flags,0,0);
  20. end;
  21. Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr ; AddrLen : Integer) : longint;
  22. begin
  23. RecvFrom:=do_syscall(syscall_nr_Recvfrom,Sock,Longint(@buf),buflen,flags,Longint(@Addr),AddrLen);
  24. end;
  25. Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
  26. begin
  27. Bind:=(do_syscall(syscall_nr_Bind,Sock,Longint(@Addr),AddrLen)=0);
  28. end;
  29. Function Listen(Sock,MaxConnect:Longint):Boolean;
  30. begin
  31. Listen:=(do_syscall(syscall_nr_Listen,Sock,MaxConnect,0)=0);
  32. end;
  33. Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  34. begin
  35. Accept:=do_syscall(syscall_nr_accept,Sock,longint(@Addr),longint(@AddrLen));
  36. If Accept<0 Then
  37. Accept:=-1;
  38. end;
  39. Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean;
  40. begin
  41. Connect:=do_syscall(syscall_nr_connect,Sock,longint(@Addr),AddrLen)=0;
  42. end;
  43. Function Shutdown(Sock:Longint;How:Longint):Longint;
  44. begin
  45. ShutDown:=do_syscall(syscall_nr_shutdown,Sock,How);
  46. end;
  47. Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  48. begin
  49. GetSocketName:=do_syscall(syscall_nr_GetSockName,Sock,longint(@Addr),longint(@AddrLen));
  50. end;
  51. Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  52. begin
  53. GetPeerName:=do_syscall(syscall_nr_GetPeerName,Sock,longint(@Addr),longint(@AddrLen));
  54. end;
  55. Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
  56. begin
  57. SetSocketOptions:=do_syscall(syscall_nr_SetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
  58. end;
  59. Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
  60. begin
  61. GetSocketOptions:=do_syscall(syscall_nr_GetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
  62. end;
  63. Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
  64. begin
  65. SocketPair:=do_syscall(syscall_nr_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
  66. end;
  67. {******************************************************************************
  68. UnixSock
  69. ******************************************************************************}
  70. Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
  71. begin
  72. Move(Addr[1],t.Path,length(Addr));
  73. t.Family:=AF_UNIX;
  74. t.Path[length(Addr)]:=#0;
  75. Len:=Length(Addr)+3;
  76. end;
  77. Function Bind(Sock:longint;const addr:string):boolean;
  78. var
  79. UnixAddr : TUnixSockAddr;
  80. AddrLen : longint;
  81. begin
  82. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  83. Bind(Sock,UnixAddr,AddrLen);
  84. Bind:=(SocketError=0);
  85. end;
  86. Function DoAccept(Sock:longint;var addr:string):longint;
  87. var
  88. UnixAddr : TUnixSockAddr;
  89. AddrLen : longint;
  90. begin
  91. AddrLen:=length(addr)+3;
  92. DoAccept:=Accept(Sock,UnixAddr,AddrLen);
  93. Move(UnixAddr.Path,Addr[1],AddrLen);
  94. SetLength(Addr,AddrLen);
  95. end;
  96. Function DoConnect(Sock:longint;const addr:string):Boolean;
  97. var
  98. UnixAddr : TUnixSockAddr;
  99. AddrLen : longint;
  100. begin
  101. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  102. DoConnect:=Connect(Sock,UnixAddr,AddrLen);
  103. end;
  104. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
  105. var
  106. s : longint;
  107. begin
  108. S:=DoAccept(Sock,addr);
  109. if S>0 then
  110. begin
  111. Sock2Text(S,SockIn,SockOut);
  112. Accept:=true;
  113. end
  114. else
  115. Accept:=false;
  116. end;
  117. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
  118. var
  119. s : longint;
  120. begin
  121. S:=DoAccept(Sock,addr);
  122. if S>0 then
  123. begin
  124. Sock2File(S,SockIn,SockOut);
  125. Accept:=true;
  126. end
  127. else
  128. Accept:=false;
  129. end;
  130. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
  131. begin
  132. Connect:=DoConnect(Sock,addr);
  133. If Connect then
  134. Sock2Text(Sock,SockIn,SockOut);
  135. end;
  136. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
  137. begin
  138. Connect:=DoConnect(Sock,addr);
  139. if Connect then
  140. Sock2File(Sock,SockIn,SockOut);
  141. end;
  142. {
  143. $Log$
  144. Revision 1.6 2002-09-07 16:01:18 peter
  145. * old logs removed and tabs fixed
  146. Revision 1.5 2002/02/05 07:54:34 marco
  147. * Fixed typo
  148. }