fix returned len
!fixup to length handling for unix socket names

1. return number of bytes actually written
2. don't require input buffer to be one larger than needed for
abstract sockets

1 and 2 are bugs

3. on failure, tell caller how much space they should have allocated, so
they don't have to a loop with larger and larger buffers until they get
success

this is just a nice-to-have, normally, there is some kind of fixed max
path length people use, so maybe its a tiny thing. but its so easy, and
makes apis so much nicer to use