我正在通过TCP/IP套接字读取数据流.流负载非常不均匀.有时大量的数据每秒都会到达,有时一小时内没有数据.在长时间不活动期间(没有来自远程服务器的数据,但连接仍在线),我的程序应采取一些措施.
我正在使用select()实现超时.它告诉我是否有数据准备就绪,但我不知道究竟能读多少而不会导致read()阻塞.阻塞是不可接受的,因为它可能比我需要的超时时间长得多.
为了提高效率,将流读入大缓冲区,并使用该缓冲区大小提供read()调用.
如果要填充的缓冲区大于套接字中现有的可用数据量,那么read()会在select()之后阻塞吗?
是否存在类似于pthread_cancel,pthread_testcancel等的Windows本机API?
如果没有,我们如何使用Windows中的pthread_cancel机制模拟从另一个线程中取消一个线程?
基于这个问题,当你调用已经使用closesocket()的套接字时,数据包将被发送到另一端而不是执行正常的断开连接(4次握手).recv()RST
但我希望执行一个优雅的断开连接,所以我需要recv()在呼叫之前退出closesocket().
有没有办法做到这一点?