sockovl.inc 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. {$ifdef legacysocket}
  16. Function socket(Domain,SocketType,Protocol:Longint):Longint;
  17. begin
  18. Socket:=fpsocket(domain,sockettype,protocol);
  19. end;
  20. Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
  21. begin
  22. Send:=fpsend(sock,@buf,buflen,flags);
  23. end;
  24. Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
  25. begin
  26. Sendto:=fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
  27. end;
  28. Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
  29. begin
  30. Recv:=fprecv(sock,@buf,buflen,flags);
  31. end;
  32. Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr ; var AddrLen :longint) : longint;
  33. begin
  34. RecvFrom:=fprecvfrom(Sock,@buf,buflen,flags,@Addr,psocklen(@AddrLen));
  35. end;
  36. Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
  37. begin
  38. Bind:=fpbind(Sock,@Addr,AddrLen)=0;
  39. end;
  40. Function Listen(Sock,MaxConnect:Longint):Boolean;
  41. begin
  42. Listen:=fplisten(sock,maxconnect)=0;
  43. end;
  44. Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  45. begin
  46. Accept:=fpaccept(sock,@addr,psocklen(@addrlen));
  47. end;
  48. Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean;
  49. begin
  50. Connect:=fpConnect(sock,@addr,addrlen)=0;
  51. end;
  52. Function Shutdown(Sock:Longint;How:Longint):Longint;
  53. begin
  54. ShutDown:=fpshutdown(sock,how);
  55. end;
  56. Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  57. begin
  58. GetSocketName:=fpgetsockname(sock,@addr,psocklen(@addrlen));
  59. end;
  60. Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
  61. begin
  62. GetPeerName:=fpgetPeerName(sock,@addr,psocklen(@addrlen));
  63. end;
  64. Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:longint):Longint;
  65. begin
  66. SetSocketOptions:=fpsetsockopt(Sock,Level,OptName,pointer(@OptVal),optlen);
  67. end;
  68. Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
  69. begin
  70. GetSocketOptions:=fpgetsockopt(Sock,Level,OptName,@OptVal,psocklen(@OptLen));
  71. end;
  72. Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
  73. begin
  74. SocketPair:=fpsocketpair(domain,sockettype,protocol,@pair[1]);
  75. end;
  76. {$endif}
  77. {******************************************************************************
  78. UnixSock
  79. ******************************************************************************}
  80. Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
  81. begin
  82. Move(Addr[1],t.Path,length(Addr));
  83. t.Family:=AF_UNIX;
  84. t.Path[length(Addr)]:=#0;
  85. Len:=Length(Addr)+3;
  86. end;
  87. Function Bind(Sock:longint;const addr:string):boolean;
  88. var
  89. UnixAddr : TUnixSockAddr;
  90. AddrLen : longint;
  91. begin
  92. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  93. Bind := fpBind(Sock, @UnixAddr, AddrLen)=0; // what the flying fuck were you thinking?
  94. end;
  95. Function DoAccept(Sock:longint;var addr:string):longint;
  96. var
  97. UnixAddr : TUnixSockAddr;
  98. AddrLen : longint;
  99. begin
  100. AddrLen:=length(addr)+3;
  101. DoAccept:=fpAccept(Sock,@UnixAddr,@AddrLen);
  102. Move(UnixAddr.Path,Addr[1],AddrLen);
  103. SetLength(Addr,AddrLen);
  104. end;
  105. Function DoConnect(Sock:longint;const addr:string):Boolean;
  106. var
  107. UnixAddr : TUnixSockAddr;
  108. AddrLen : longint;
  109. begin
  110. Str2UnixSockAddr(addr,UnixAddr,AddrLen);
  111. DoConnect:=fpConnect(Sock,@UnixAddr,AddrLen)=0;
  112. end;
  113. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
  114. var
  115. s : longint;
  116. begin
  117. S:=DoAccept(Sock,addr);
  118. if S>0 then
  119. begin
  120. Sock2Text(S,SockIn,SockOut);
  121. Accept:=true;
  122. end
  123. else
  124. Accept:=false;
  125. end;
  126. Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
  127. var
  128. s : longint;
  129. begin
  130. S:=DoAccept(Sock,addr);
  131. if S>0 then
  132. begin
  133. Sock2File(S,SockIn,SockOut);
  134. Accept:=true;
  135. end
  136. else
  137. Accept:=false;
  138. end;
  139. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
  140. begin
  141. Connect:=DoConnect(Sock,addr);
  142. If Connect then
  143. Sock2Text(Sock,SockIn,SockOut);
  144. end;
  145. Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
  146. begin
  147. Connect:=DoConnect(Sock,addr);
  148. if Connect then
  149. Sock2File(Sock,SockIn,SockOut);
  150. end;
  151. Function CloseSocket (Sock:Longint):Longint;
  152. begin
  153. if fpclose(Sock)=0 then
  154. CloseSocket := 0 else
  155. CloseSocket := -1;
  156. end;