Suppose you have a parametric curve, for example:
xx[t_] := Sin[t]; yy[t_] := Cos[t]; zz[t_] := t;
What gives: 
The tangent vector to our curve is formed by derivatives in each direction. In our case
Tg[t_]:= {Cos[t], -Sin[t], 1}
The orthogonal plane to this vector comes to the solution of the implicit equation:
Tg[t].{x - xx[t], y - yy[t], z - zz[t]} == 0
In our case, it is:
-t + z + Cos[t] (x - Sin[t]) - (y - Cos[t]) Sin[t] == 0
Now we find a circle in this plane centered on the curve. ie:
c[{x_, y_, z_, t_}] := (x - xx[t])^2 + (y - yy[t])^2 + (z - zz[t])^2 == r^2
Solving both equations, you get the equation for circles:

NTN!
Edit
And by drawing a lot of circles, you can get a (inefficient) handset:

Or with a nice 3D graphics library:

Edit
Since you insist :) here is a program for calculating the circle at the joints.
a = {1, 2, 3}; b = {3, 2, 1}; c = {2, 3, 4}; l1 = Line[{a, b}]; l2 = Line[{b, c}]; k = Cross[(b - a), (c - b)] + b; (*Cross Product*) angle = -ArcCos[(a - b).(c - b)/(Norm[(a - b)] Norm[(c - b)])]/2; q = RotationMatrix[angle, k - b].(a - b); circle[t_] := (k - b)/Norm[k - b] Sin@t + (q)/Norm[q] Cos@t + b; Show[{Graphics3D[{ Red, l1, Blue, l2, Black, Line[{b, k}], Green, Line[{b, q + b}]}, Axes -> True], ParametricPlot3D[circle[t], {t, 0, 2 Pi}]}]

Edit
Here you have a grid constructed by this method. This is not very, IMHO:
