Are bit fields a good idea?
In applications like this where you really don't care about the layout of bits, they are just fine.
However… there is a violation in this library. As nrdvana points out in another comment, the "uint8_t ssolen:4" and the "uint8_t type : 2" fields are assumed to layout on top of each other using the same bits of the same byte, but this isn't really guaranteed by the C standard, though I think any sane compiler will do it.
I think I read the order of a struct members is guaranteed. So ssolen and type should not overlap ?