📄 ssdotnet.pas
字号:
s.ShutDown(SocketShutdown(how));
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function SetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory;
optlen: Integer): Integer;
begin
Result := 0;
NullErr;
try
s.SetSocketOption(SocketOptionLevel(level), SocketOptionName(optname), optval);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function SetSockOptObj(s: TSocket; level, optname: Integer; optval: TObject): Integer;
begin
Result := 0;
NullErr;
try
s.SetSocketOption(SocketOptionLevel(level), SocketOptionName(optname), optval);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function GetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory;
var optlen: Integer): Integer;
begin
Result := 0;
NullErr;
try
s.GetSocketOption(SocketOptionLevel(level), SocketOptionName(optname), optval);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer;
//function SendTo(s: TSocket; const Buf; len, flags: Integer; addrto: TVarSin): Integer;
begin
NullErr;
try
result := s.SendTo(Buf, len, SocketFlags(flags), addrto);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer;
//function Send(s: TSocket; const Buf; len, flags: Integer): Integer;
begin
NullErr;
try
result := s.Send(Buf, len, SocketFlags(flags));
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer;
//function Recv(s: TSocket; var Buf; len, flags: Integer): Integer;
begin
NullErr;
try
result := s.Receive(Buf, len, SocketFlags(flags));
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
//function RecvFrom(s: TSocket; var Buf; len, flags: Integer; from: PSockAddr;
// var fromlen: Integer): Integer;
function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer;
//function RecvFrom(s: TSocket; var Buf; len, flags: Integer; from: TVarSin): Integer;
var
EP: EndPoint;
begin
NullErr;
try
EP := from;
result := s.ReceiveFrom(Buf, len, SocketFlags(flags), EndPoint(EP));
from := EP as IPEndPoint;
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function ntohs(netshort: u_short): u_short;
begin
Result := IPAddress.NetworkToHostOrder(NetShort);
end;
function ntohl(netlong: u_long): u_long;
begin
Result := IPAddress.NetworkToHostOrder(NetLong);
end;
function Listen(s: TSocket; backlog: Integer): Integer;
begin
Result := 0;
NullErr;
try
s.Listen(backlog);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function IoctlSocket(s: TSocket; cmd: DWORD; var arg: u_long): Integer;
var
inv, outv: TMemory;
begin
Result := 0;
NullErr;
try
if cmd = DWORD(FIONBIO) then
s.Blocking := arg = 0
else
begin
inv := BitConverter.GetBytes(arg);
outv := BitConverter.GetBytes(integer(0));
s.IOControl(cmd, inv, outv);
arg := BitConverter.ToUInt32(outv, 0);
end;
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function htons(hostshort: u_short): u_short;
begin
Result := IPAddress.HostToNetworkOrder(Hostshort);
end;
function htonl(hostlong: u_long): u_long;
begin
Result := IPAddress.HostToNetworkOrder(HostLong);
end;
//function GetSockName(s: TSocket; name: PSockAddr; var namelen: Integer): Integer;
function GetSockName(s: TSocket; var name: TVarSin): Integer;
begin
Result := 0;
NullErr;
try
Name := s.localEndPoint as IPEndpoint;
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
//function GetPeerName(s: TSocket; name: PSockAddr; var namelen: Integer): Integer;
function GetPeerName(s: TSocket; var name: TVarSin): Integer;
begin
Result := 0;
NullErr;
try
Name := s.RemoteEndPoint as IPEndpoint;
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
//function Connect(s: TSocket; name: PSockAddr; namelen: Integer): Integer;
function Connect(s: TSocket; const name: TVarSin): Integer;
begin
Result := 0;
NullErr;
try
s.Connect(name);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
function CloseSocket(s: TSocket): Integer;
begin
Result := 0;
NullErr;
try
s.Close;
except
on e: System.Net.Sockets.SocketException do
begin
Result := integer(SOCKET_ERROR);
end;
end;
end;
//function Bind(s: TSocket; addr: PSockAddr; namelen: Integer): Integer;
function Bind(s: TSocket; const addr: TVarSin): Integer;
begin
Result := 0;
NullErr;
try
s.Bind(addr);
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := integer(SOCKET_ERROR);
end;
end;
end;
//function Accept(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket;
function Accept(s: TSocket; var addr: TVarSin): TSocket;
begin
NullErr;
try
result := s.Accept();
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := nil;
end;
end;
end;
function Socket(af, Struc, Protocol: Integer): TSocket;
begin
NullErr;
try
result := TSocket.Create(AddressFamily(af), SocketType(Struc), ProtocolType(Protocol));
except
on e: System.Net.Sockets.SocketException do
begin
GetErrCode(e);
Result := nil;
end;
end;
end;
{=============================================================================}
function GetPortService(value: string): integer;
var
n: integer;
begin
Result := 0;
value := Lowercase(value);
for n := 0 to High(Services) do
if services[n, 0] = value then
begin
Result := strtointdef(services[n, 1], 0);
break;
end;
if Result = 0 then
Result := StrToIntDef(value, 0);
end;
{=============================================================================}
function InitSocketInterface(stack: string): Boolean;
begin
Result := True;
end;
function DestroySocketInterface: Boolean;
begin
NullErr;
Result := True;
end;
initialization
begin
SynSockCS := SyncObjs.TCriticalSection.Create;
// SET_IN6_IF_ADDR_ANY (@in6addr_any);
// SET_LOOPBACK_ADDR6 (@in6addr_loopback);
end;
finalization
begin
NullErr;
SynSockCS.Free;
end;
{$ENDIF}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -