> ShellExecute(Application.Handle, 'open', @ClientFileName, @ClientParams, > @ClientDir, SW_SHOW);
I'm not sure you can use ShellExecute to inherit handles. Use CreateProcess which has a parameter bInheritHandles. > to server with "telnet 127.0.0.1 5000"... The client project is executed, > but show message "10038". Error 10038 means you pass a handle to winsock that is not a socket handle. In your case, the handle is not inherited from the parent process. -- [EMAIL PROTECTED] http://www.overbyte.be ----- Original Message ----- From: "Arnoldo - Optextil" <[EMAIL PROTECTED]> To: "ICS support mailing" <twsocket@elists.org> Sent: Tuesday, May 24, 2005 3:23 PM Subject: Re: [twsocket] Telnet > Hi, > > About redirect the connection, I created two small projects, exemplify the > problem ! > > Server: > > unit UServer; > > interface > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, WSocket, SHELLAPI; > > type > TForm1 = class(TForm) > SrvSocket: TWSocket; > procedure FormCreate(Sender: TObject); > procedure SrvSocketSessionAvailable(Sender: TObject; ErrCode: Word); > private > { Private declarations } > public > { Public declarations } > end; > > var > Form1: TForm1; > > implementation > > {$R *.dfm} > > procedure TForm1.FormCreate(Sender: TObject); > begin > SrvSocket.Close; > SrvSocket.Addr := '0.0.0.0'; { Use any interface for listening } > SrvSocket.Proto := 'tcp'; > SrvSocket.Port := '5000'; > SrvSocket.Listen; > end; > > procedure TForm1.SrvSocketSessionAvailable(Sender: TObject; ErrCode: Word); > var > ClientFileName, ClientParams, ClientDir : array [0..255] of char; > NewHSocket : TSocket; > begin > NewHSocket := SrvSocket.Accept; > StrPCopy(@ClientFileName, 'c:\rf\projectcliente.exe'); > StrPCopy(@ClientParams, ''+ inttostr(newhsocket)); > StrPCopy(@ClientDir, 'c:\rf\'); > ShellExecute(Application.Handle, 'open', @ClientFileName, @ClientParams, > @ClientDir, SW_SHOW); > end; > > Client: > > unit UCliente; > > interface > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, WSocket, Spin, StdCtrls, Buttons, WinSock; > > type > TForm2 = class(TForm) > Socket: TWSocket; > Memo: TMemo; > procedure SocketDataAvailable(Sender: TObject; ErrCode: Word); > procedure FormCreate(Sender: TObject); > private > { Private declarations } > public > { Public declarations } > end; > > var > Form2: TForm2; > > implementation > > {$R *.dfm} > > procedure TForm2.SocketDataAvailable(Sender: TObject; ErrCode: Word); > var > Buffer : array [0..1023] of char; > Len : Integer; > begin > Len := Socket.Receive(@Buffer, SizeOf(Buffer) - 1); > if Len <= 0 then > Exit; > > Buffer[Len] := #0; > Memo.lines.add(StrPas(Buffer)); > end; > > procedure TForm2.FormCreate(Sender: TObject); > var > NewHSocket : TSocket; > begin > if paramcount = 1 then > Begin > caption := ParamStr(1); > NewHSocket := StrToIntDef(ParamStr(1),0); > Socket.Dup(NewHSocket); > End; > end; > > Running this example, the server is listen on port 5000, on prompt I connect > to server with "telnet 127.0.0.1 5000"... The client project is executed, > but > show message "10038". > > When you say: "Once you have the > socket handle for the accepted connection, you may start another process, > make it inherit the handle and let him process the connection. The second > process may use TWSocket and receive the inherited handle using Dup(). " > > The implementation above is correct ? If not, have a sample ? > > Thanks > > Arnoldo > > ----- Original Message ----- > From: "Francois PIETTE" <[EMAIL PROTECTED]> > To: "ICS support mailing" <twsocket@elists.org> > Sent: Saturday, May 21, 2005 4:41 AM > Subject: Re: [twsocket] Telnet > > > >> I'm not reinventing the wheel. I saw your samples programs about > >> TWSocketServer too. My problem not is work with various instances of > >> clients. My problem is when the client connect the server, the server > >> redirect the connection to another application. I have the Socket.Accept, > > I > >> run another application, in this another application who I do establish > >> connection with the client ? It's possible ? > > > > Altough I have nerver done this, I think it is possible. Once you have the > > socket handle for the accepted connection, you may start another process, > > make it inherit the handle and let him process the connection. The second > > process may use TWSocket and receive the inherited handle using Dup(). You > > have somewhat to split TWSocketServer in two parts. The listening part > > stay > > in one process and the client handling goes into another one. > > > > -- > > [EMAIL PROTECTED] > > http://www.overbyte.be > > > > > > -- > > To unsubscribe or change your settings for TWSocket mailing list > > please goto http://www.elists.org/mailman/listinfo/twsocket > > Visit our website at http://www.overbyte.be > > > > -- > To unsubscribe or change your settings for TWSocket mailing list > please goto http://www.elists.org/mailman/listinfo/twsocket > Visit our website at http://www.overbyte.be > -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be