It is simply delegated to underlying TInetSocket instance, which in turn calls setsockopt with that value for both SO_RCVTIMEO and SO_SNDTIMEO. The corresponding code:
{$ifdef windows}
opt := AValue;
E:=fpsetsockopt(Handle, SOL_SOCKET, SO_RCVTIMEO, @opt, 4)<>0;
if not E then
E:=fpsetsockopt(Handle, SOL_SOCKET, SO_SNDTIMEO, @opt, 4)<>0;
{$endif windows}
{$ifdef unix}
time.tv_sec:=avalue div 1000;
time.tv_usec:=(avalue mod 1000) * 1000;
E:=fpsetsockopt(Handle, SOL_SOCKET, SO_RCVTIMEO, @time, sizeof(time))<>0;
if not E then
E:=fpsetsockopt(Handle, SOL_SOCKET, SO_SNDTIMEO, @time, sizeof(time))<>0;
{$endif}
if E then
Raise ESocketError.Create(seIOTimeout,[AValue]);
Reading it (unix part) easily says that the value is in milliseconds unit. Windows one although differs in parameter, behaves the same (find SO_SNDTIMEO in
this page).
We still lack documentation for a lot of (DRY supporting) things, but the source code is there and won't lie, so you can always inspect it yourself.