Linux SetSockOpt error 22

Создал сокет, принимаю пакеты через recv. Но если мне нужно завершить прием, то у меня не получиться выйти, т.к. recv ждет. Из этой ситуации можно выйти используя SetSockOpt(FSocket, SOL_SOCKET, SO_RCVTIMEO, @FPSocketTimeOut, Len); В Windows нормально отрабатывает, а вот в Linux возвращает ошибку 22. Как я понял, то ошибка означает, что аргументы не те передаю. Стал копаться в документации. 3-им параметром передается вместо указателя на Integer структура TimeVal. Вот что у меня получилось, но все равно не работает. Где ошибка?

type
  TTimeVal = record
    tv_sec: Integer; 
    tv_usec: Integer;  
  end;

  PTimeVal = ^TTimeVal;

new(PSocketTimeOut);
PSocketTimeOut^.tv_sec:= 0;
 PSocketTimeOut^.tv_usec:= FSocketTimeOut;
 Len:=  SizeOf(TTimeVal);
 if SetSockOpt(FSocket, SOL_SOCKET, SO_RCVTIMEO, PSocketTimeOut, Len) = -1 then
errCode:= GetLastError();
 writeln('errCode = ' + errCode.ToString);

Ответы (0 шт):