unixsock.inc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 fpsocket (domain:cint; xtype:cint; protocol: cint):cint;
  16. Begin
  17. fpSocket:=Do_Syscall(syscall_nr_socket,Domain,xtype,Protocol);
  18. internal_socketerror:=fpgeterrno;
  19. End;
  20. function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
  21. begin
  22. fpSend:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,0,0);
  23. internal_socketerror:=fpgeterrno;
  24. end;
  25. function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
  26. begin
  27. fpSendto:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen);
  28. internal_socketerror:=fpgeterrno;
  29. end;
  30. function fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t;
  31. begin
  32. fpRecv:=do_syscall(syscall_nr_Recvfrom,S,tsysparam(buf),len,flags,0,0);
  33. internal_socketerror:=fpgeterrno;
  34. end;
  35. function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
  36. begin
  37. fpRecvFrom:=do_syscall(syscall_nr_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen));
  38. internal_socketerror:=fpgeterrno;
  39. end;
  40. function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
  41. begin
  42. fpBind:=do_syscall(syscall_nr_Bind,S,TSysParam(addrx),addrlen);
  43. internal_socketerror:=fpgeterrno;
  44. end;
  45. function fplisten (s:cint; backlog : cint):cint;
  46. begin
  47. fpListen:=do_syscall(syscall_nr_Listen,S,backlog);
  48. internal_socketerror:=fpgeterrno;
  49. end;
  50. function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
  51. begin
  52. fpAccept:=do_syscall(syscall_nr_accept,S,TSysParam(addrx),TSysParam(addrlen));
  53. internal_socketerror:=fpgeterrno;
  54. end;
  55. function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint;
  56. begin
  57. fpConnect:=do_syscall(syscall_nr_connect,S,TSysParam(name),namelen);
  58. internal_socketerror:=fpgeterrno;
  59. end;
  60. function fpshutdown (s:cint; how:cint):cint;
  61. begin
  62. fpShutDown:=do_syscall(syscall_nr_shutdown,S,how);
  63. internal_socketerror:=fpgeterrno;
  64. end;
  65. function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint;
  66. begin
  67. fpGetSockName:=do_syscall(syscall_nr_GetSockName,S,TSysParam(name),TSysParam(namelen));
  68. internal_socketerror:=fpgeterrno;
  69. end;
  70. function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint;
  71. begin
  72. fpGetPeerName:=do_syscall(syscall_nr_GetPeerName,S,TSysParam(name),TSysParam(namelen));
  73. internal_socketerror:=fpgeterrno;
  74. end;
  75. function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint;
  76. begin
  77. fpSetSockOpt:=do_syscall(syscall_nr_SetSockOpt,S,level,optname,TSysParam(optval),optlen);
  78. internal_socketerror:=fpgeterrno;
  79. end;
  80. function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
  81. begin
  82. fpGetSockOpt:=do_syscall(syscall_nr_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen));
  83. internal_socketerror:=fpgeterrno;
  84. end;
  85. function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
  86. begin
  87. fpSocketPair:=do_syscall(syscall_nr_SocketPair,d,xtype,protocol,TSysParam(sv));
  88. internal_socketerror:=fpgeterrno;
  89. end;