Ich habe einen kleinen Server geschrieben der Anfragen an eine Datenbank ausführt und das Ergebnis zurück sendet.
Nun weis ich aber Leider nicht wie ich die zuvor aufgebaute Verbindung sauber schließe.
Listener Thread zum Abhörchen nach Verbindungen:
Delphi-Quellcode:
procedure T .Execute;
var fClient : TSockAddr;
iRet,
iLen : Integer;
fReadSet : TFDSet;
fTime : TTimeVal;
...
ZeroMemory(@fClient, SizeOf(fClient));
iLen := SizeOf(fClient);
fTime.tv_sec := 0;
fTime.tv_usec := 1000 * 300; // warte 500 ms
repeat
FD_ZERO(fReadSet);
FD_SET(iSocket, fReadSet);
select(0, @fReadSet, nil, nil, @fTime);
// Liegt was an??
if FD_ISSET(iSocket, fReadSet) then
begin
iRet := accept(iSocket, @fClient, @iLen);
if iRet > 0 then // Anfrage in Thread ausführen
TMDERequest.Create(iRet, inet_ntoa(fClient.sin_addr));
end;
until Terminated;
...
Das Arbeitstier was so nicht funktioniert:
Delphi-Quellcode:
procedure TMDERequest.Execute;
...
recv( ??? ); // Anfrage Empfangen
...
send( ??? ); // Ergebnis Senden
...
Sleep(2000);
closesocket(iSocket); // Das funktioniert so nicht ?
...
Hilfe, ich bin zu doof dazu!