We analyze several distributed, continuous time protocols for a fair allocation of bandwidths to flows in a network (or resources to agents). Our protocols converge to an allocation which is a logarithmic approximation, simultaneously, to all canonical social welfare functions (i.e. functions which are symmetric, concave, and non-decreasing). These protocols can be started in an arbitrary state. While a similar protocol was known before, it only applied to the simple bandwidth allocation problem, and its stability and convergence time was not understood. In contrast, our protocols also apply to the more general case of Leontief utilities, where each user may place a different requirement on each resource. Further, we prove that our protocols converge in polynomial time. The best convergence time we prove is O(n log ncmaxamax cminamin ), where n is the number of agents in the network, cmax and cmin are the maximum and minimum capacity of the links, and amax, amin are the largest and sm...