Patent ID: 8645568

Claim:
An apparatus, comprising: a route server having code programmed to connect to network elements from a plurality of Internet network service providers (ISP's) to the network elements of a plurality of users through the route server, wherein the route server also has code programmed to maintain multiple views of a routing table as well as implement multiple Border Gateway Protocol (BGP) instances, each instance representing a different autonomous system, in a single instance of the route server, wherein also the route server having code programmed to match a first user to one or more of the Internet network service providers based on criteria provided by both the first user and the plurality of Internet network service providers including that the first user can select from not only the best possible routes of each Internet network service but a full listing of all possible routes to a destination address from each Internet network service matching the first user's criteria in order to construct a route table to get IP packets of the first user to the destination address, wherein any portions of the route server implemented in software code are stored on a non-transitory machine-readable medium in an executable format, wherein the route server is coded as a multiple threaded daemon, and the multiple threaded daemon consists of a main thread and four or more independent persistent threads, which include a read thread that has code programmed to handle all Transmission Control Protocol (TCP) traffic from peers, accept new TCP connections, and detect failed connections, a write thread that has code programmed to send actual data packets to peer connections, an update thread that has code programmed to decide which prefixes need to be advertised or withdrawn to each BGP peer, and a route table thread that has code programmed to maintain a single route table which is maintained for all peers by being an only persistent thread with both read and write access to the route table, wherein the route table thread is the only persistent thread that can write into the route table in order to allow fast access by all threads to the route table by allowing the other independent persistent threads an ability to read from the route table at the same time and not having to lock threads because only the route table thread can make changes to the route table.