Winsock recv not working after shutdown

2019-01-29 05:00发布

问题:

I'm trying to get a simple winsock program working, so I create my socket and send my data just fine. Then I use shutdown(ConnectSocket, SD_SEND) which according to msdn, disables sending data, but not receiving? The example on msdn does this too.

But after I call shutdown my recv function returns 0 without receiving any data.
If I comment out the shutdown code, everything works as it should.

Am I missing something?

回答1:

No, that's normal. The other side responded to your shutdown by shutting down. A zero return from recv indicates a normal connection shutdown. If you don't want the other side to shutdown its half of the connection, don't shut down yours.

(What did you expect the other side to do when its call to recv returned zero?)



回答2:

If it's an HTTP protocol, use Connection header to close connection or keep opened:

Connection: Close

in this case you don't need to shutdown sending

or

Connection: keep-alive

receiving will loop without shutting down the sending part of connection