sockovl.inc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. {
  2. This file is part of the Free Pascal run time library.
  3. (c) 2000-2003 by Marco van de Voort
  4. member of the Free Pascal development team.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. socket call implementations for FreeBSD
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY;without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. }
  12. {******************************************************************************
  13. Basic Socket Functions
  14. ******************************************************************************}
  15. Function socket(Domain,SocketType,Protocol:Longint):Longint;
  16. begin
  17. Socket:=fpsocket(domain,sockettype,protocol);
  18. end;
  19. Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
  20. begin
  21. Send:=fpsend(sock,@buf,buflen,flags);
  22. end;
  23. Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
  24. begin
  25. Sendto:=fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
  26. end;
  27. Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
  28. begin
  29. Recv:=fprecv(sock,@buf,buflen,flags);
  30. end;
  31. Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr ; var AddrLen :longint) : longint;
  32. begin
  33. RecvFrom:=fprecvfrom(Sock,@buf,buflen,flags,@Addr,psocklen(@AddrLen));
  34. end;
  35. Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
  36. begin
  37. Bind:=fpbind(Sock,@Addr,AddrLen)=0;
  38. end;
  39. Function Listen(Sock,MaxConnect:Longint):Boolean;
  40. begin
  41. Listen:=fplisten(sock,maxconnect)=0;
  42. end;
  43. Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  44. begin
  45. Accept:=fpaccept(sock,@addr,psocklen(@addrlen));
  46. end;
  47. Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean;
  48. begin
  49. Connect:=fpConnect(sock,@addr,addrlen)=0;
  50. end;
  51. Function Shutdown(Sock:Longint;How:Longint):Longint;
  52. begin
  53. ShutDown:=fpshutdown(sock,how);
  54. end;
  55. Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  56. begin
  57. GetSocketName:=fpgetsockname(sock,@addr,psocklen(@addrlen));
  58. end;
  59. Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  60. begin
  61. GetPeerName:=fpgetPeerName(sock,@addr,psocklen(@addrlen));
  62. end;
  63. Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:longint):Longint;
  64. begin
  65. SetSocketOptions:=fpsetsockopt(Sock,Level,OptName,pointer(@OptVal),optlen);
  66. end;
  67. Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
  68. begin
  69. GetSocketOptions:=fpgetsockopt(Sock,Level,OptName,@OptVal,psocklen(@OptLen));
  70. end;
  71. Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
  72. begin
  73. SocketPair:=fpsocketpair(domain,sockettype,protocol,@pair[1]);
  74. end;
  75. {******************************************************************************
  76. UnixSock
  77. ******************************************************************************}
  78. Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
  79. begin
  80. Move(Addr[1],t.Path,length(Addr));
  81. t.Family:=AF_UNIX;
  82. t.Path[length(Addr)]:=#0;
  83. Len:=Length(Addr)+3;
  84. end;
  85. Function Bind(Sock:longint;const addr:string):boolean;
  86. var
  87. UnixAddr : TUnixSockAddr;
  88. AddrLen : longint;
  89. begin
  90. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  91. Bind(Sock,UnixAddr,AddrLen);
  92. Bind:=(SocketError=0);
  93. end;
  94. Function DoAccept(Sock:longint;var addr:string):longint;
  95. var
  96. UnixAddr : TUnixSockAddr;
  97. AddrLen : longint;
  98. begin
  99. AddrLen:=length(addr)+3;
  100. DoAccept:=Accept(Sock,UnixAddr,AddrLen);
  101. Move(UnixAddr.Path,Addr[1],AddrLen);
  102. SetLength(Addr,AddrLen);
  103. end;
  104. Function DoConnect(Sock:longint;const addr:string):Boolean;
  105. var
  106. UnixAddr : TUnixSockAddr;
  107. AddrLen : longint;
  108. begin
  109. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  110. DoConnect:=Connect(Sock,UnixAddr,AddrLen);
  111. end;
  112. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
  113. var
  114. s : longint;
  115. begin
  116. S:=DoAccept(Sock,addr);
  117. if S>0 then
  118. begin
  119. Sock2Text(S,SockIn,SockOut);
  120. Accept:=true;
  121. end
  122. else
  123. Accept:=false;
  124. end;
  125. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
  126. var
  127. s : longint;
  128. begin
  129. S:=DoAccept(Sock,addr);
  130. if S>0 then
  131. begin
  132. Sock2File(S,SockIn,SockOut);
  133. Accept:=true;
  134. end
  135. else
  136. Accept:=false;
  137. end;
  138. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
  139. begin
  140. Connect:=DoConnect(Sock,addr);
  141. If Connect then
  142. Sock2Text(Sock,SockIn,SockOut);
  143. end;
  144. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
  145. begin
  146. Connect:=DoConnect(Sock,addr);
  147. if Connect then
  148. Sock2File(Sock,SockIn,SockOut);
  149. end;
  150. Function CloseSocket (Sock:Longint):Longint;
  151. begin
  152. if fpclose(Sock)=0 then
  153. CloseSocket := 0 else
  154. CloseSocket := -1;
  155. end;