bsdsock.inc 4.2 KB

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