[c++winsock2.0]How to abort winsock blocking call?

前端 未结 3 1489
被撕碎了的回忆
被撕碎了的回忆 2020-12-22 10:04

I use Winsock 2 in C++, and wonder how to make my server stop reading from the client connection. The reading thread gets blocked in recv() and I have no idea h

相关标签:
3条回答
  • 2020-12-22 10:55

    To abort the blocking call to recv(), you can close the socket with closesocket() from another thread. Even if it's a bit ugly, it should work.

    You can try to shutdown() the socket too (I never tested that).

    0 讨论(0)
  • 2020-12-22 10:57

    After I read your response, I got an idea. It end up with setsockopt(). I use it to set time out for recv(), If it's timeout, I just check if system still wanna read from this socket or not.

    This way make reading thread spend most of the time waiting for incoming packet in recv().

    Thank you, Voteforpedro

    0 讨论(0)
  • 2020-12-22 11:09

    If your program has other things to do besides working with socket I/O, you should not block in the first place.

    You claim your thread must wait, but that's just a reflection of your program's current design. You should redesign it so it works with some form of non-blocking sockets. Every networking problem can be addressed using non-blocking sockets.

    Since you're using Winsock, you have many alternatives here, not just select(). select() is a good choice only if your application must run on many platforms and you are unable to use the superior (but mutually incompatible) alternatives available on every modern platform.

    0 讨论(0)
提交回复
热议问题