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);