1. A method for enabling applications to flexibly distribute data packets in a multiprocessing system, the method comprising: maintaining a plurality of connection data structures, each connection data structure corresponding to a network thread executed in the multiprocessing system; using a plurality of algorithms provided by an application to distribute the data packets to a plurality of different network threads; and accessing, by each network thread of the plurality of different network threads, a corresponding connection data structure to determine how to process one of the data packets arriving on a connection using any algorithm different from the plurality of algorithms provided by the application used to distribute the data packets for the application to the the plurality of different network threads, wherein each network thread only accesses its corresponding connection data structure.