You're using blocking sockets, so read will not terminate until the connection is closed from the other end, or until 128 octets are read. I suppose the other side is sending data less than 128 octets ...
I've looked, but I haven't found any decent ones. When I was learning Winsock, I ended up just downloading a wrapper library and writing for that. I still don't program straight Winsock; it's easier ...