[fpc-devel] Synapse hangs in ARM-Linux

waldo kitty wkitty42 at windstream.net
Mon Jan 28 20:03:35 CET 2013


On 1/28/2013 05:47, Michael Schnell wrote:
> I tried to reproduce this with a more simple project, just accessing a
> non-existing IP address, but I found that while on Windows here Synapse issues a
> time out (after some seconds, exactly like when the Heating Controller fails to
> answer), when compiling for Linux (PC and ARM) the error message is "HR_Error:
> 113,No route to host" and is issued immediately and thus not involves a timeout
> (and no hanging on ARM).

i'm trying to make sure i'm following along here because i'm also using synapse 
for a project...

using a "slightly modified" testhttp (that came with synapse, attached) and 
attempting to connect via http to a non-existant IP in my network, i get a 0 
result code, empty result string and "Connection reset by peer" string on my 
winwhatever box but that may be due to a firewall proxy that is injected into 
all http streams on that winwhatever system... on my os/2 eCS2 box, i get 500 
result code, empty result string and "Connection refused" string... however, if 
i try using a non-existent hostname, both return 500 result code, empty result 
string and "Host not found" string...

i would suggest that trying to use a non-existent IP or host is not the way you 
want to go to test this... the results are not going to be what you should be 
getting from the heating controller connection when it fails...

your "No route to host" actually sounds plausible if there is, in fact, no route 
to the IP you have chosen... that also sounds like there's no default routing 
gateway defined for networking traffic headed out of the local network... when i 
test trying to access a non-existent IP outside my local network, my winwhatever 
box reports "Connection reset by peer" (as above) and my OS/2 eCS2 box reports 
"Connection timed out"...

suffice it to say that synapse's error codes are not always they seem to be, 
unfortunately... run testhttp and you'll see what i mean... i'm pretty sure 
there are other result codes and strings that i've not been told about or 
discovered yet... oh, and yes, this testhttp will use ssl libraries if they 
exist so you can test against https as well as http ;)

EG:
testhttp http://google.com/

301 Moved Permanently
"ssl_openssl" "OpenSSL 0.9.8o 01 Jun 2010"
""
""
""

HTTP/1.0 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 28 Jan 2013 19:00:49 GMT
Expires: Wed, 27 Feb 2013 19:00:49 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Connection: Keep-Alive


testhttp https://google.com/

301 Moved Permanently
"ssl_openssl" "OpenSSL 0.9.8o 01 Jun 2010"
""
""
""

HTTP/1.0 301 Moved Permanently
Location: https://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 28 Jan 2013 19:01:35 GMT
Expires: Wed, 27 Feb 2013 19:01:35 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 220
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Connection: Keep-Alive

-------------- next part --------------
{$MODE DELPHI}

Program testhttp;

uses
  httpsend, classes, ssl_openssl;

var
  HTTP: THTTPSend;
  l: tstringlist;
begin
  HTTP := THTTPSend.Create;
  l := TStringList.create;
  try
    if not HTTP.HTTPMethod('GET', Paramstr(1)) then
      begin
	writeln('ERROR');
        writeln(Http.Resultcode,' "',Http.Resultstring,'"');
        writeln('"',Http.Sock.SSL.LibName,'" "',Http.Sock.SSL.LibVersion,'"');
        writeln('"',Http.Sock.GetErrorDescEx,'"');
        writeln('"',Http.Sock.LastErrorDesc,'"');
        writeln('"',Http.Sock.SSL.LastErrorDesc,'"');
      end
    else
      begin
        writeln(Http.Resultcode, ' ', Http.Resultstring);
        writeln('"',Http.Sock.SSL.LibName,'" "',Http.Sock.SSL.LibVersion,'"');
        writeln('"',Http.Sock.GetErrorDescEx,'"');
        writeln('"',Http.Sock.LastErrorDesc,'"');
        writeln('"',Http.Sock.SSL.LastErrorDesc,'"');
        writeln;
        writeln(Http.headers.text);
        writeln;
        l.loadfromstream(Http.Document);
//        writeln(l.text);
     end;
  finally
    HTTP.Free;
    l.free;
  end;
end.



More information about the fpc-devel mailing list