Swiped from the 'BitTorrent complaint' thread over on relays...
If an exit relay then drops that connection silently, Tor (and the user) cannot know it needs to select a different exit. The connections simply fail. ... What you do with that iptables rule (or similar rules) is block a bunch of URLs.
There may be room to take and work this capability further...
Instead of populating the directory with the actual exit policies, offload this into a client poll of a set of live exits the client wishes to queuing up for rotation into for common ports, or even ports it's recently seen in use. Plus a general random poll to ensure N number of exits are held that will be able to service the full matrix of 65536 ports M-times redundantly, sortof like tor_exitlist.py function. Then like Tor transparent proxy to the host's packet filter, there can be a way the exit can read, API, or be fed the host's current rules to then be polled for it by the client. Plus an expected ruleset lite/timeout value. Users of custom policies would need to use separate rule tables, interfaces, or be smart about about any sensitive rule data if they care. Directories would still carry all exits. But only predefined policies efficiently marked by an 8 bit label. 0) non-exit 1) fully open 2) pollme 3) reduced 4) std set A 5) std set B, etc. Client releases hold the policy label map, including revoked and reserved label definitions. Or the map can be held in realtime dht or alikes.