lspawnfcgiunix.inc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. uses
  2. Classes, BaseUnix;
  3. function SpawnFCGIProcess(App, Enviro: string; const aPort: Word): Integer;
  4. var
  5. TheSocket: TLSocket;
  6. i: Integer;
  7. SL: TStringList;
  8. aNil: Pointer = nil;
  9. ppEnv, ppArgs: ppChar;
  10. begin
  11. Result:=FpFork;
  12. if Result = 0 then begin
  13. ppArgs:=@aNil;
  14. for i:=3 to 10000 do
  15. CloseSocket(i);
  16. if CloseSocket(StdInputHandle) <> 0 then
  17. Exit(LSocketError);
  18. TheSocket:=TLSocket.Create;
  19. TheSocket.SetState(ssBlocking);
  20. if not TheSocket.Listen(aPort) then
  21. Exit(LSocketError);
  22. ppEnv:=@aNil;
  23. if Length(Enviro) > 0 then begin
  24. SL:=TStringList.Create;
  25. repeat
  26. i:=Pos(':', Enviro);
  27. if i > 0 then begin
  28. SL.Add(Copy(Enviro, 1, i - 1));
  29. Delete(Enviro, 1, i);
  30. end else
  31. SL.Add(Enviro);
  32. until i = 0;
  33. GetMem(ppEnv, SizeOf(pChar) * (SL.Count + 1));
  34. for i:=0 to SL.Count-1 do
  35. ppEnv[i]:=pChar(SL[i]);
  36. ppEnv[SL.Count]:=nil;
  37. end;
  38. FpExecve(pChar(App), ppArgs, ppEnv);
  39. end else if Result > 0 then
  40. Result:=0; // it went ok
  41. end;