1Call Manager is a single-threaded application. 2It's easier that way. 3Nothing blocks except a select() call. 4 5The pptp code provides an fd_set for us to watch, and a function 6to call to see if a given event pertains to the pptp code. 7Each CALL connection goes in the exceptions set, and is watched for close. 8We need a separate list of these, to check against the fd_set when 9an event happens. 10 11Writes get copied in a queue, and are only written if the select says we 12can. 13 14Reads go in another queue -- non-blocking! -- and messages are made from 15the queue as we are able. 16 17We register callbacks on significant events (any and all of them, if 18we please) which can trigger a close on a user unix socket, for 19example. 20 21Nomenclature: 22 inet_read|write ... TCP port 1723 PPTP control connection 23 unix_read|write ... Call manager Unix socket to pppd/gre. 24