Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2013-04

Odyssey: SSockets and Threads.

48 messages · 11 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

silvioprog

Hello,

There are a multi-thread example using SSockets in FPC?

I'm trying to implement it*, but it's very hard and this work it's consuming all my time. The difficulty is to read and write at the same time. I'm almost certain that using SSockets, I would have to create one socket for writing and one for reading, separately by threads.

Thank you!

* https://bitbucket.org/silvioprog/tcpipcomp (this repo is temporary, and this all code can undergo drastic changes at any time)

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to silvioprog

2013/4/24 silvioprog

Show quoted text 14 lines
Hello, There are a multi-thread example using SSockets in FPC? I'm trying to implement it*, but it's very hard and this work it's consuming all my time. The difficulty is to read and write at the same time. I'm almost certain that using SSockets, I would have to create one socket for writing and one for reading, separately by threads. Thank you! * https://bitbucket.org/silvioprog/tcpipcomp (this repo is temporary, and this all code can undergo drastic changes at any time)

... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I need to use native code)

Silvio Clécio My public projects - github.com/silvioprog
Ludo Brands
to silvioprog
silvioprog wrote 21 lines
2013/4/24 silvioprog < > Hello, There are a multi-thread example using SSockets in FPC? I'm trying to implement it*, but it's very hard and this work it's consuming all my time. The difficulty is to read and write at the same time. I'm almost certain that using SSockets, I would have to create one socket for writing and one for reading, separately by threads. Thank you! * https://bitbucket.org/silvioprog/tcpipcomp (this repo is temporary, and this all code can undergo drastic changes at any time) ... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I need to use native code)

what is the problem with using Synapse, LNet or Indy? Seen the questions you are asking I would suggest you use an existing library and stay away from writing your own socket library or start with learning the basics of socket programming.

SOCK_STREAM sockets are full duplex and you can read and write simultaneously on them, even without threading if you use non blocking mode. SSocket has a Property NonBlocking but I don't see any code that handles the EAGAIN or EWOULDBLOCK errors. That is probably left to the user of TSocketStream to deal with. So SSocket is a really thin layer that leaves the user with all the problems you are trying to solve.

Ludo

Michael Van Canneyt
to silvioprog: 2013/4/24 silvioprog ... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I…
silvioprog wrote 7 lines
2013/4/24 silvioprog Hello, There are a multi-thread example using SSockets in FPC? I'm trying to implement it*, but it's very hard and this work it's consuming all my time. The difficulty is to read and write at the same time. I'm almost certain that using SSockets, I would have to create one socket for writing and one for reading, separately by threads.

Why is that ?

Please define "read and write at the same time" first.

Show quoted text 6 lines
Thank you! * https://bitbucket.org/silvioprog/tcpipcomp (this repo is temporary, and this all code can undergo drastic changes at any time) ... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I need to use native code)

Strange remark. Synapse, lnet or Indy are native pascal code.

Michael.

Michael Schnell
to silvioprog: There are a multi-thread example using SSockets in FPC? I'm trying to implement it*, but…
silvioprog wrote
There are a multi-thread example using SSockets in FPC?

It should be no problem at all to use sockets in Threads (native or via lnet or Synapse.

Of course if using threads, you will see the problem of inter-thread communication and/or tread-to-mainthread signaling.

For the later (more likely to be necessary) you can easily use TThread.Synchronize(), TThread.Queue() and QueueAsyncCall().

These will work out of the box with the WidgetTypes "Windows" and "KDE", and supposedly "GTK" and some Mac-flavors, but not with some of the others.

-Michael

Michael Schnell
to silvioprog: 2013/4/24 silvioprog ... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I…
silvioprog wrote
(no Synapse, LNet or Indy please, I need to use native code)

Indy does provide support for threading (as does AsyncPro, the Socket flavor of which could be of interest here). But I don't know if it's easy to use Indy with Lazarus, and I know that there is no Lazarus port for AsyncPro yet (even though it is open Source and especially the COM-Port flavor is requested rather often).

-Michael

silvioprog
to Ludo Brands: what is the problem with using Synapse, LNet or Indy? Seen the questions you are asking I…

2013/4/25 Ludo Brands

Show quoted text 6 lines
[...] what is the problem with using Synapse, LNet or Indy? Seen the questions you are asking I would suggest you use an existing library and stay away from writing your own socket library or start with learning the basics of socket programming.

There no problem. Zeos has various features, auto-commit, script-executor, monitor etc.., But I prefer using SQLdb even when SQLdb was starting. :)

I'm not trying to write a library. I'm trying to solve a problem but using native units of Free Pascal (I miss a SktComp in Free Pascal, Delphi has it and works fine). After I solving my problem, I want to send the sources to be distributed in the samples of Free Pascal or Lazarus, so I'm avoiding third-party libraries.

SOCK_STREAM sockets are full duplex and you can read and write

Show quoted text 7 lines
simultaneously on them, even without threading if you use non blocking mode. SSocket has a Property NonBlocking but I don't see any code that handles the EAGAIN or EWOULDBLOCK errors. That is probably left to the user of TSocketStream to deal with. So SSocket is a really thin layer that leaves the user with all the problems you are trying to solve. Ludo

Very interesting this information. I'll study more and try to solve this problem.

Thank you very much Ludo! :)

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to Michael Van Canneyt: Why is that ? Please define "read and write at the same time" first. Strange remark.…

2013/4/25 Michael Van Canneyt

Why is that ? Please define "read and write at the same time" first.

Sorry, my English is bad. ^^

So, a small example (pseudo code):

procedure TMyThread1.Execute;
begin
  while not Terminated do
  begin
    GlobalSocket.Write ...
  end;
end;
procedure TMyThread2.Execute;
begin
  while not Terminated do
  begin
    GlobalSocket.Read ...
  end;
end;
MyThread1.Start;
MyThread2.Start;

Thank you!

Show quoted text 13 lines
> > * https://bitbucket.org/**silvioprog/tcpipcomp<https://bitbucket.org/silvioprog/tcpipcomp> (this > repo is temporary, and this all code can undergo drastic changes at any > time) > > > ... like ScktComp of Delphi. (no Synapse, LNet or Indy please, I need to > use native code) > Strange remark. Synapse, lnet or Indy are native pascal code. Michael.

Yes, I love Synapse, but it is not distributed with Free Pascal. I think the Free Pascal need to distribute something like SktComp( http://pastebin.com/QBZU89cy) of Delphi. SSockets is not multi-threaded.

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to silvioprog

2013/4/25 silvioprog

Show quoted text 5 lines
[...] Yes, I love Synapse, but it is not distributed with Free Pascal. I think the Free Pascal need to distribute something like SktComp( http://pastebin.com/QBZU89cy) of Delphi. SSockets is not multi-threaded.

... and I'm trying to por SktComp to Free Pascal, but I do not know if the license of Delphi allow it. I ported only for studies.

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to Michael Schnell: Indy does provide support for threading (as does AsyncPro, the Socket flavor of which…

2013/4/25 Michael Schnell

Show quoted text 13 lines
On 04/24/2013 10:21 PM, silvioprog wrote: > (no Synapse, LNet or Indy please, I need to use native code) > Indy does provide support for threading (as does AsyncPro, the Socket flavor of which could be of interest here). But I don't know if it's easy to use Indy with Lazarus, and I know that there is no Lazarus port for AsyncPro yet (even though it is open Source and especially the COM-Port flavor is requested rather often). -Michael

Indy has a feature (OnDisconnect property) that notifies you when a client is not online. I find this feature very interesting, and I intend to implement it with threads. But I seen that I have much work to do. :)

Silvio Clécio My public projects - github.com/silvioprog
Michael Schnell
to silvioprog
silvioprog wrote
Indy has a feature (OnDisconnect property) that notifies you when a client is not online.

Nope.

It notifies you when the other site actively and successfully does a disconnect and your site correctly understands the notification. Not correctly communicated aborts stay undetected.

-Michael

silvioprog
to Michael Schnell

2013/4/25 Michael Schnell

Show quoted text 16 lines
On 04/25/2013 05:15 PM, silvioprog wrote: > > > Indy has a feature (OnDisconnect property) that notifies you when a > client is not online. > Nope. It notifies you when the other site actively and successfully does a disconnect and your site correctly understands the notification. Not correctly communicated aborts stay undetected. -Michael

I'll write an example for you to test, please wait ...

Silvio Clécio My public projects - github.com/silvioprog
Paul Breneman
to silvioprog
silvioprog wrote 18 lines
2013/4/25 Michael Schnell > On 04/25/2013 05:15 PM, silvioprog wrote: > >> >> Indy has a feature (OnDisconnect property) that notifies you when a >> client is not online. >> > Nope. > > It notifies you when the other site actively and successfully does a > disconnect and your site correctly understands the notification. Not > correctly communicated aborts stay undetected. > > -Michael > I'll write an example for you to test, please wait ...

Maybe I can then update this old page? :)
http://www.brenemanlabs.com/iConnect.htm

silvioprog
to silvioprog: 2013/4/25 Michael Schnell I'll write an example for you to test, please wait ... Silvio…

2013/4/25 silvioprog

Show quoted text 21 lines
2013/4/25 Michael Schnell > On 04/25/2013 05:15 PM, silvioprog wrote: > >> >> >> Indy has a feature (OnDisconnect property) that notifies you when a >> client is not online. >> > > Nope. > > It notifies you when the other site actively and successfully does a > disconnect and your site correctly understands the notification. Not > correctly communicated aborts stay undetected. > > -Michael > I'll write an example for you to test, please wait ...

In attached.

Yes, OnDisconnect, it works exactly as you explained. But I also have the OnError event, which is useful when the client is terminated by an error (eg. killing the client via Ctrl+Alt+Del). :)

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to Paul Breneman: Maybe I can then update this old page? :) http://www.brenemanlabs.com/iConnect.htm

2013/4/25 Paul Breneman

Show quoted text 24 lines
silvioprog wrote: > 2013/4/25 Michael Schnell > > On 04/25/2013 05:15 PM, silvioprog wrote: >> >> >>> Indy has a feature (OnDisconnect property) that notifies you when a >>> client is not online. >>> >>> Nope. >> >> It notifies you when the other site actively and successfully does a >> disconnect and your site correctly understands the notification. Not >> correctly communicated aborts stay undetected. >> >> -Michael >> >> > I'll write an example for you to test, please wait ... > Maybe I can then update this old page? :) http://www.brenemanlabs.com/**iConnect.htm<http://www.brenemanlabs.com/iConnect.htm>

hehe... I'll read it ...

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to silvioprog

2013/4/25 silvioprog

Show quoted text 6 lines
Very nice article: http://www.bastisoft.de/programmierung/pascal/pasinet.html Outdated, but very very nice. :)

in...:

repeat
   put all sockets currently connected in the read set;
   put the listening socket in the read set;
   Select(read set, no other sets, no timeout);
   respond to all sockets that are left in the read set;
until false;

:o So I need of "Select" function. If I am not mistaken it is not being used in ssockets. I'll to do it manually. I will implement it on my own.

Silvio Clécio My public projects - github.com/silvioprog
Michael Van Canneyt
to silvioprog
silvioprog wrote 17 lines
2013/4/25 silvioprog Very nice article: http://www.bastisoft.de/programmierung/pascal/pasinet.html Outdated, but very very nice. :) in...: repeat put all sockets currently connected in the read set; put the listening socket in the read set; Select(read set, no other sets, no timeout); respond to all sockets that are left in the read set; until false; :o So I need of "Select" function. If I am not mistaken it is not being used in ssockets. I'll to do it manually. I will implement it on my own.

Well, ssockets is very low level.

fpselect() is mostly useful when you combine multiple file it can be done, IMHO it makes little sense to create a select() method on the socket stream, since it would only have one socket handle.

You can perfectly do a fpselect() with the handles of the streams that ssockets uses.

Michael.

silvioprog
to Michael Van Canneyt

2013/4/25 Michael Van Canneyt

Show quoted text 12 lines
[...] Well, ssockets is very low level. fpselect() is mostly useful when you combine multiple file descriptors at once. Although it can be done, IMHO it makes little sense to create a select() method on the socket stream, since it would only have one socket handle. You can perfectly do a fpselect() with the handles of the streams that ssockets uses. Michael.

Nice.

The socket of Delphi and Synapse implements WaitForData:

function TWinSocketStream.WaitForData(Timeout: Longint): Boolean;
var
  FDSet: TFDSet;
  TimeVal: TTimeVal;
begin
  TimeVal.tv_sec := Timeout div 1000;
  TimeVal.tv_usec := (Timeout mod 1000) * 1000;
  FD_ZERO(FDSet);
  FD_SET(FSocket.SocketHandle, FDSet);
  Result := select(0, @FDSet, nil, nil, @TimeVal) > 0;
end;

I do not know where it would be used, it's just an observation hehe...

Silvio Clécio My public projects - github.com/silvioprog
Michael Van Canneyt
to silvioprog
silvioprog wrote 29 lines
2013/4/25 Michael Van Canneyt [...] Well, ssockets is very low level. fpselect() is mostly useful when you combine multiple file it can be done, IMHO it makes little sense to create a select() method on the socket stream, since it would only have one socket handle. You can perfectly do a fpselect() with the handles of the streams that ssockets uses. Michael. Nice. The socket of Delphi and Synapse implements WaitForData: function TWinSocketStream.WaitForData(Timeout: Longint): Boolean; var   FDSet: TFDSet;   TimeVal: TTimeVal; begin   TimeVal.tv_sec := Timeout div 1000;   TimeVal.tv_usec := (Timeout mod 1000) * 1000;   FD_ZERO(FDSet);   FD_SET(FSocket.SocketHandle, FDSet);   Result := select(0, @FDSet, nil, nil, @TimeVal) > 0; end; I do not know where it would be used, it's just an observation hehe...

Yes, but the above is what I mean with 'it does not make much sense'.

I can easily add this - in fact I will do so, but with multiple sockets it is better to combine the waitfordata()

Michael.

Ludo Brands
to Michael Van Canneyt
Michael Van Canneyt wrote 11 lines
On Thu, 25 Apr 2013, silvioprog wrote: > I do not know where it would be used, it's just an observation hehe... Yes, but the above is what I mean with 'it does not make much sense'. I can easily add this - in fact I will do so, but with multiple sockets it is better to combine the waitfordata()

In blocking mode the select is vital if you want to do simultaneous read and write on the same socket in the same thread. Otherwise you are simply blocking the thread in a recv when nothing comes in or in a send when the socket buffer is not empty. Note that select also returns when an exception occurs.

Ludo

Michael Van Canneyt
to Ludo Brands
Ludo Brands wrote 18 lines
On 04/26/2013 08:58 AM, Michael Van Canneyt wrote: > > > On Thu, 25 Apr 2013, silvioprog wrote: > >> I do not know where it would be used, it's just an observation hehe... > > Yes, but the above is what I mean with 'it does not make much sense'. > > I can easily add this - in fact I will do so, but with multiple sockets > it is better to combine the waitfordata() > In blocking mode the select is vital if you want to do simultaneous read and write on the same socket in the same thread. Otherwise you are simply blocking the thread in a recv when nothing comes in or in a send when the socket buffer is not empty. Note that select also returns when an exception occurs.

I am aware of all this.
My only 'objection' is that waitfordata() will operate on a single socket only. Good for single client, bad for server.

Michael.

Michael Schnell
to silvioprog: 2013/4/25 silvioprog In attached. Yes, OnDisconnect, it works exactly as you explained.…
silvioprog wrote
Yes, OnDisconnect, it works exactly as you explained. But I also have the OnError event, which is useful when the client is terminated by an error (eg. killing the client via Ctrl+Alt+Del). :)

It might be able to detect a certain kind of errors.

Nonetheless, errors only arise when in fact communication is running. A socket stays open forever, if no communication is executed at all, thus a broken link in between stays undetected.

To detect a broken link you need to do a regular life check communication.

-Michael

Marco van de Voort
to Michael Van Canneyt: I am aware of all this. My only 'objection' is that waitfordata() will operate on a…

In our previous episode, Michael Van Canneyt said:

Show quoted text 6 lines
> when the socket buffer is not empty. Note that select also returns when > an exception occurs. I am aware of all this. My only 'objection' is that waitfordata() will operate on a single socket only. Good for single client, bad for server.

How many open sockets must you have to qualify as a server?

Ludo Brands
to Michael Van Canneyt: I am aware of all this. My only 'objection' is that waitfordata() will operate on a…
Michael Van Canneyt wrote 24 lines
On Fri, 26 Apr 2013, Ludo Brands wrote: > On 04/26/2013 08:58 AM, Michael Van Canneyt wrote: >> >> >> On Thu, 25 Apr 2013, silvioprog wrote: >> >>> I do not know where it would be used, it's just an observation hehe... >> >> Yes, but the above is what I mean with 'it does not make much sense'. >> >> I can easily add this - in fact I will do so, but with multiple sockets >> it is better to combine the waitfordata() >> > > In blocking mode the select is vital if you want to do simultaneous read > and write on the same socket in the same thread. Otherwise you are > simply blocking the thread in a recv when nothing comes in or in a send > when the socket buffer is not empty. Note that select also returns when > an exception occurs. I am aware of all this.

My message is meant for the OP who wants to do simultaneous read/write on the socket in one thread and doesn't know what the use of select is. The 'it does not make much sense' is in that context misleading the OP and some more explanation was needed;)

Ludo

Michael Van Canneyt
to Marco van de Voort: In our previous episode, Michael Van Canneyt said: How many open sockets must you have to…
Marco van de Voort wrote 9 lines
In our previous episode, Michael Van Canneyt said: >> when the socket buffer is not empty. Note that select also returns when >> an exception occurs. > > I am aware of all this. > My only 'objection' is that waitfordata() will operate on a single socket only. > Good for single client, bad for server. How many open sockets must you have to qualify as a server?

Well, you can't get more than ~ 65000 so lets go for half of that :-)

Michael.

Marco van de Voort
to Michael Van Canneyt

In our previous episode, Michael Van Canneyt said:

Show quoted text 7 lines
>> I am aware of all this. >> My only 'objection' is that waitfordata() will operate on a single socket only. >> Good for single client, bad for server. > > How many open sockets must you have to qualify as a server? Well, you can't get more than ~ 65000 so lets go for half of that :-)

I maybe have cut explanation short a bit, but I meant that not all servers are internet facing high load ones, where single thread per connection is a mortal sin.

Michael Van Canneyt
to Marco van de Voort
Marco van de Voort wrote 12 lines
In our previous episode, Michael Van Canneyt said: >>> I am aware of all this. >>> My only 'objection' is that waitfordata() will operate on a single socket only. >>> Good for single client, bad for server. >> >> How many open sockets must you have to qualify as a server? > > Well, you can't get more than ~ 65000 so lets go for half of that :-) I maybe have cut explanation short a bit, but I meant that not all servers are internet facing high load ones, where single thread per connection is a mortal sin.

I understood that. No problem.

Like I said, I'll add a WaitForData() or Select(read,write,exception) or something similar.

Just trying to find a 'nice' solution for multiple sockets. Probably a "class function select (array of socketstream)"

Michael.

silvioprog
to Ludo Brands: In blocking mode the select is vital if you want to do simultaneous read and write on the…

2013/4/26 Ludo Brands

Show quoted text 18 lines
On 04/26/2013 08:58 AM, Michael Van Canneyt wrote: > On Thu, 25 Apr 2013, silvioprog wrote: > >> I do not know where it would be used, it's just an observation hehe... > > Yes, but the above is what I mean with 'it does not make much sense'. > > I can easily add this - in fact I will do so, but with multiple sockets > it is better to combine the waitfordata() > In blocking mode the select is vital if you want to do simultaneous read and write on the same socket in the same thread. Otherwise you are simply blocking the thread in a recv when nothing comes in or in a send when the socket buffer is not empty. Note that select also returns when an exception occurs. Ludo

Exactly. In my small sample, when no buffer is received from server, the process stays blocked on:

https://bitbucket.org/silvioprog/tcpipcomp/src/f42be14db1e74d750fa88d6b4554b209145ff589/src/tcpipclient.pas?at=master#cl-189

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to Michael Schnell: It might be able to detect a certain kind of errors. Nonetheless, errors only arise when…

2013/4/26 Michael Schnell

Show quoted text 14 lines
On 04/25/2013 06:15 PM, silvioprog wrote: > Yes, OnDisconnect, it works exactly as you explained. But I also have the > OnError event, which is useful when the client is terminated by an error > (eg. killing the client via Ctrl+Alt+Del). :) > It might be able to detect a certain kind of errors. Nonetheless, errors only arise when in fact communication is running. A socket stays open forever, if no communication is executed at all, thus a broken link in between stays undetected. To detect a broken link you need to do a regular life check communication.

Pefectly. I'm trying to implement it. :)

Silvio Clécio My public projects - github.com/silvioprog
silvioprog
to Ludo Brands: My message is meant for the OP who wants to do simultaneous read/write on the socket in…

2013/4/26 Ludo Brands

Show quoted text 31 lines
On 04/26/2013 09:19 AM, Michael Van Canneyt wrote: > On Fri, 26 Apr 2013, Ludo Brands wrote: > >> On 04/26/2013 08:58 AM, Michael Van Canneyt wrote: >>> >>> >>> On Thu, 25 Apr 2013, silvioprog wrote: >>> >>>> I do not know where it would be used, it's just an observation hehe... >>> >>> Yes, but the above is what I mean with 'it does not make much sense'. >>> >>> I can easily add this - in fact I will do so, but with multiple sockets >>> it is better to combine the waitfordata() >>> >> >> In blocking mode the select is vital if you want to do simultaneous read >> and write on the same socket in the same thread. Otherwise you are >> simply blocking the thread in a recv when nothing comes in or in a send >> when the socket buffer is not empty. Note that select also returns when >> an exception occurs. > > I am aware of all this. My message is meant for the OP who wants to do simultaneous read/write on the socket in one thread and doesn't know what the use of select is. The 'it does not make much sense' is in that context misleading the OP and some more explanation was needed;) Ludo

Ludo, a small question....

So, In loop of my thread, to the process doesn't stay blocked in recv, I need to use select in client too?

Silvio Clécio My public projects - github.com/silvioprog
Ludo Brands
to silvioprog
silvioprog wrote 5 lines
Ludo, a small question.... So, In loop of my thread, to the process doesn't stay blocked in recv, I need to use select in client too?

If your socket is in blocking mode and you don't want your thread to block, yes. Server or client, there is no difference. The same for send. When you have a small block to send that fits in the socket buffer and the socket buffer is empty, send will return immediately. But if you have more data to send, your second send will block until the first send is completed.
The same select can be used to return when the recv buffer is not empty or the send buffer empty or when an exception occurs. See http://linux.die.net/man/2/select

Ludo

silvioprog
to Sven Barth

2013/4/27 Sven Barth

Show quoted text 12 lines
On 26.04.2013 21:38, silvioprog wrote: > Select in socket of Delphi 2007 (a friend sent it to me: > http://www.sendspace.com/file/**06ev02<http://www.sendspace.com/file/06ev02> > ): > Gaahhh!!! Don't simply send Delphi code to this list! Did you ever heard of stuff like clean room reverse engineeering?! Regards, Sven

Oooooooooopppss, sorry. I'll delete it. :X

Silvio Clécio My public projects - github.com/silvioprog
waldo kitty
to silvioprog
silvioprog wrote 12 lines
2013/4/27 Sven Barth < > On 26.04.2013 21:38, silvioprog wrote: Select in socket of Delphi 2007 (a friend sent it to me: http://www.sendspace.com/file/__06ev02: Gaahhh!!! Don't simply send Delphi code to this list! Did you ever heard of stuff like clean room reverse engineeering?! Oooooooooopppss, sorry. I'll delete it. :X

you can't delete it from everywhere...

eg: systems that download this _mailing_list_ as separate emails into whatever mail reading tool is used...

NOTE: No off-list assistance is given without prior approval. Please keep mailing list traffic on the list unless private contact is specifically requested and granted.
silvioprog
to waldo kitty

2013/4/27 waldo kitty

Show quoted text 29 lines
On 4/27/2013 11:06, silvioprog wrote: > 2013/4/27 Sven Barth < > < >> > > > On 26.04.2013 21:38, silvioprog wrote: > > Select in socket of Delphi 2007 (a friend sent it to me: > http://www.sendspace.com/file/**__06ev02<http://www.sendspace.com/file/__06ev02> > : > > > Gaahhh!!! Don't simply send Delphi code to this list! Did you ever > heard of > stuff like clean room reverse engineeering?! > > Oooooooooopppss, sorry. I'll delete it. :X > you can't delete it from everywhere... eg: systems that download this _mailing_list_ as separate emails into whatever mail reading tool is used... -- NOTE: No off-list assistance is given without prior approval. Please keep mailing list traffic on the list unless private contact is specifically requested and granted.
From the SendSpace yes. Try to download it now. ;)
Silvio Clécio My public projects - github.com/silvioprog
waldo kitty
to silvioprog
silvioprog wrote 19 lines
2013/4/27 waldo kitty < > On 4/27/2013 11:06, silvioprog wrote: 2013/4/27 Sven Barth On 26.04.2013 21:38, silvioprog wrote: Select in socket of Delphi 2007 (a friend sent it to me: http://www.sendspace.com/file/____06ev02: Gaahhh!!! Don't simply send Delphi code to this list! Did you ever heard of stuff like clean room reverse engineeering?! Oooooooooopppss, sorry. I'll delete it. :X you can't delete it from everywhere... eg: systems that download this _mailing_list_ as separate emails into whatever mail reading tool is used... From the SendSpace yes. Try to download it now. ;)

what "SendSpace"?? i've never heard of it... the code came in /inside/ your posting... [time passes] there was a link to the code in your post, yes... but you also posted the actual code, too...[/time passes]

my example explicitly points to local storage in a email client, as well... if you or anyone can delete posts from my local email storage from remote, i'd definitely like to know about it :P

NOTE: No off-list assistance is given without prior approval. Please keep mailing list traffic on the list unless private contact is specifically requested and granted.
Lukasz Sokol
to silvioprog: 2013/4/27 Sven Barth Oooooooooopppss, sorry. I'll delete it. :X Silvio Clécio My public…
silvioprog wrote 18 lines
2013/4/27 Sven Barth < > On 26.04.2013 21:38, silvioprog wrote: Select in socket of Delphi 2007 (a friend sent it to me: http://www.sendspace.com/file/__06ev02 <http://www.sendspace.com/file/06ev02>): Gaahhh!!! Don't simply send Delphi code to this list! Did you ever heard of stuff like clean room reverse engineeering?! Regards, Sven Oooooooooopppss, sorry. I'll delete it. :X

Too late, gmane mail to news already stored it too.

L.

Reinier Olislagers
to Lukasz Sokol
Lukasz Sokol wrote 8 lines
On 27/04/2013 16:06, silvioprog wrote: > 2013/4/27 Sven Barth < > > > > On 26.04.2013 21:38, silvioprog wrote: > Oooooooooopppss, sorry. I'll delete it. :X > Too late, gmane mail to news already stored it too.

What? The link that shows 404 page not found? Or the actual content?

Lukasz Sokol
to Reinier Olislagers
Reinier Olislagers wrote 12 lines
On 29-4-2013 11:50, Lukasz Sokol wrote: > On 27/04/2013 16:06, silvioprog wrote: >> 2013/4/27 Sven Barth < >> > >> >> On 26.04.2013 21:38, silvioprog wrote: >> Oooooooooopppss, sorry. I'll delete it. :X >> > Too late, gmane mail to news already stored it too. What? The link that shows 404 page not found? Or the actual content?

Your post to the mailing list, now is stored in NNTP system (at least in gmane)...

L.

Reinier Olislagers
to Lukasz Sokol
Lukasz Sokol wrote 15 lines
On 29/04/2013 11:04, Reinier Olislagers wrote: > On 29-4-2013 11:50, Lukasz Sokol wrote: >> On 27/04/2013 16:06, silvioprog wrote: >>> 2013/4/27 Sven Barth < >>> > >>> >>> On 26.04.2013 21:38, silvioprog wrote: >>> Oooooooooopppss, sorry. I'll delete it. :X >>> >> Too late, gmane mail to news already stored it too. > > What? The link that shows 404 page not found? Or the actual content? > Your post to the mailing list, now is stored in NNTP system (at least in gmane)...

I understand, but the problematic part was an upload to a third party site which has been deleted long since. So even browsing gmane/other archives, there's nothing left to see...

Jonas Maebe
to Reinier Olislagers
Reinier Olislagers wrote
I understand, but the problematic part was an upload to a third party site which has been deleted long since. So even browsing gmane/other archives, there's nothing left to see...

He also posted one of the Delphi functions to the list itself:

Jonas

Reinier Olislagers
to Jonas Maebe
Jonas Maebe wrote 8 lines
On 29 Apr 2013, at 14:12, Reinier Olislagers wrote: > I understand, but the problematic part was an upload to a third party > site which has been deleted long since. So even browsing gmane/other > archives, there's nothing left to see... He also posted one of the Delphi functions to the list itself:

Ah :(

waldo kitty
to Reinier Olislagers: What? The link that shows 404 page not found? Or the actual content?
Reinier Olislagers wrote 11 lines
On 29-4-2013 11:50, Lukasz Sokol wrote: > On 27/04/2013 16:06, silvioprog wrote: >> 2013/4/27 Sven Barth< >> > >> >> On 26.04.2013 21:38, silvioprog wrote: >> Oooooooooopppss, sorry. I'll delete it. :X >> > Too late, gmane mail to news already stored it too. What? The link that shows 404 page not found? Or the actual content?

the original message had a link and the actual code... deleting the link is one thing but the code is already distributed around the world and cannot be deleted by the OP...

NOTE: No off-list assistance is given without prior approval. Please keep mailing list traffic on the list unless private contact is specifically requested and granted.
silvioprog
to Jonas Maebe: He also posted one of the Delphi functions to the list itself: Jonas

2013/4/29 Jonas Maebe

Show quoted text 14 lines
On 29 Apr 2013, at 14:12, Reinier Olislagers wrote: I understand, but the problematic part was an upload to a third party site which has been deleted long since. So even browsing gmane/other archives, there's nothing left to see... He also posted one of the Delphi functions to the list itself: Jonas

Well, I messed up badly, sorry again.

I don't know if that would solve the problem, but if they prefer, we can delete me from the FPC lists, because I have no intention to piracy. Will be discretion of yours guys. x(

Silvio Clécio My public projects - github.com/silvioprog
waldo kitty
to silvioprog
silvioprog wrote 5 lines
Well, I messed up badly, sorry again. I don't know if that would solve the problem, but if they prefer, we can delete me from the FPC lists, because I have no intention to piracy. Will be discretion of yours guys. x(

speaking only for myself: i think you have learned the lesson and there's no reason to kick you out of these lists...

what others do to clean up the mistake on their systems is up to them. of course... there may be a method to have the article cancelled from gmane and the other news servers that propagate the list in news format... the question is if the cancelmsg will propagate thru those news servers and be honored...

NOTE: No off-list assistance is given without prior approval. Please keep mailing list traffic on the list unless private contact is specifically requested and granted.
Lukasz Sokol
to waldo kitty: the original message had a link and the actual code... deleting the link is one thing but…
waldo kitty wrote 21 lines
On 4/29/2013 06:04, Reinier Olislagers wrote: > On 29-4-2013 11:50, Lukasz Sokol wrote: >> On 27/04/2013 16:06, silvioprog wrote: >>> 2013/4/27 Sven >>> Barth< >>> >>> >>> >>> On 26.04.2013 21:38, silvioprog wrote: Oooooooooopppss, sorry. >>> I'll delete it. :X >>> >> Too late, gmane mail to news already stored it too. > > What? The link that shows 404 page not found? Or the actual > content? the original message had a link and the actual code... deleting the link is one thing but the code is already distributed around the world and cannot be deleted by the OP...

I guess the devs don't use gmane so they can just cat /dev/urandom > the mailbox file with the offending code ;) 3 times ;) interleaved with cat /dev/zero ;) same for the owner of the forum server.... if it got there.

as for the rest of us, we should be fine as long as Silvio's answer won't pop up or be referenced anywhere, so e.g. google won't index it somewhere visible... which probably is why we should end this thread immediately ;)

L.