[fpc-pascal] Re: WSAGetLastError returns 0 when it shouldn't but I cannot see why

L L at z505.com
Thu Feb 28 03:29:49 CET 2008


Luca wrote:

> I don't think that synapse is to blame[*]: my test
> program is also using the sockets unit directly, and stores SocketError
> (which just calls WSAGetLastError) in a variable.



Found the problem using my brute force writeln('') skills. It is an 
issue with freepascal's stack or something to do with buggy threads 
methinks. As it is when you call lasterror within another procedure with 
local variables.. they are corrupted or something.

procedure PError(msg:string);
var e:integer;
begin
  e:=SocketError;
  writeln('PError: '+ msg, ' ', e);
end;

procedure TSocketThread.Execute;
var s:LongInt;
    SAddr:TInetSockAddr;
    Connected:boolean;
    e: integer;
begin
  Connected:=false;
  S:=fpSocket(AF_INET,SOCK_STREAM,0);
  Perror('Socket issue?');
  e:= socketerror;
  if e > -1 then
  begin
    SAddr.sin_family:=AF_INET;
    Saddr.sin_port:=htons(FPort);
    SAddr.sin_addr.s_addr:=StrToNetAddr(FAddress).s_addr;
    if fpconnect(S, at SAddr,SizeOf(SAddr))=0 then Connected:=true;
    e:=SocketError;
    Writeln('Fuck: ',e);    
    PError('Connect issue'); // THIS RESETS LASTERR, IT SHOULD NOT
  end else writeln('fpsocket issue');
  if Connected then fpShutdown(s,2);
  CloseSocket(s);
  FFinished:=True;
end;




More information about the fpc-pascal mailing list