More than just bidirectional: It supports a lot of other socket types, and other shenanigans. I use socat a lot for testing network services, gluing together applications, and lots of other places where writing a little C program would otherwise be needed.