<> <> <> <<>> <<>> DIRECTORY IO USING [STREAM], XNS USING [Address, Socket, unknownSocket], XNSStream USING [Listener, Milliseconds, waitForever]; XNSStreamExtras: CEDAR DEFINITIONS ~ { <> XFilterProc: TYPE = PROC [remote: XNS.Address, clientData: REF] RETURNS [accept: BOOL]; XListenerProc: TYPE = PROC [stream: IO.STREAM, remote: XNS.Address, clientData: REF]; CreateXListener: PROC [ socket: XNS.Socket _ XNS.unknownSocket, worker: XListenerProc, getTimeout, putTimeout: XNSStream.Milliseconds _ XNSStream.waitForever, clientData: REF _ NIL, filter: XFilterProc _ NIL, -- NIL => Accept all requests echoFilter: XFilterProc _ NIL] -- NIL => Answer all echos RETURNS [XNSStream.Listener]; <> <<1) Checking for duplicates. >> <<2) Calling the client's filter. Returning FALSE will reject the connection. >> <<3) Creating a stream with the specified timeouts.>> <<4) FORKing a new instance of worker to interact with the new stream.>> <<5) Detaching the new process.>> <> <> <<>> GetLocalFromListener: PROC [listener: XNSStream.Listener] RETURNS [local: XNS.Address]; }.