This predicate waits for at most TimeOut seconds. TimeOut 
may be specified as a floating point number to specify fractions of a 
second. If TimeOut equals infinite, wait_for_input/3 
waits indefinitely. If Timeout is 0 or 0.0 this predicate 
returns without waiting.107Prior 
to 7.3.23, the integer value‘0’was the same as infinite.
This predicate can be used to implement timeout while reading and to 
handle input from multiple sources and is typically used to wait for 
multiple (network) sockets. On Unix systems it may be used on any stream 
that is associated with a system file descriptor. On Windows it can only 
be used on sockets. If ListOfStreams contains a stream that 
is not associated with a supported device, a domain_error(waitable_stream, 
Stream) is raised.
The example below waits for input from the user and an explicitly 
opened secondary terminal stream. On return, Inputs may hold
user_input or P4 or both.
?- open('/dev/ttyp4', read, P4),
   wait_for_input([user_input, P4], Inputs, 0).
When 
available, the implementation is based on the poll() system call. 
The poll() puts no additional restriction on the number of open 
files the process may have. It does limit the time to 2^31-1 
milliseconds (a bit less than 25 days). Specifying a too large timeout 
raises a
representation_error(timeout) exception. If poll() 
is not supported by the OS, select() is used. The select() 
call can only handle file descriptors up to FD_SETSIZE. If 
the set contains a descriptor that exceeds this limit a
representation_error(’FD_SETSIZE’) is raised.
Note that wait_for_input/3 
returns streams that have data waiting. This does not mean you can, for 
example, call read/2 
on the stream without blocking as the stream might hold an incomplete 
term. The predicate
set_stream/2 
using the option timeout(Seconds) can be used to make the 
stream generate an exception if no new data arrives within the timeout 
period. Suppose two processes communicate by exchanging Prolog terms. 
The following code makes the server immune for clients that write an 
incomplete term:
    ...,
    tcp_accept(Server, Socket, _Peer),
    tcp_open(Socket, In, Out),
    set_stream(In, timeout(10)),
    catch(read(In, Term), _, (close(Out), close(In), fail)),
    ...,