我打开一个TCP套接字并将其连接到网络上其他位置的另一个套接字.然后,我可以成功发送和接收数据.我有一个计时器,每秒钟向套接字发送一些东西.
然后,我通过强行断开连接(在这种情况下拉出以太网电缆)粗暴地中断连接.我的套接字仍然报告它每秒都成功写出数据.这持续大约1小时30分钟,最终给出写入错误.
什么指定套接字最终接受另一端的超时消失了?它是操作系统(Ubuntu 11.04),它来自TCP/IP规范,还是套接字配置选项?
我有一个套接字监听器挂在recv函数上:
size_t recvLen = recv(sock, buf, 512, 0);
Run Code Online (Sandbox Code Playgroud)
我想通过打断它来终止这个线程.MSDN说:
当发出阻塞的Winsock调用(例如recv)时,Winsock可能需要等待网络事件才能完成调用.在这种情况下,Winsock会执行可警告的等待,这可以通过在同一线程上安排的异步过程调用(APC)来中断.
我怎样才能做到这一点?
我有一个聊天应用程序,它有一个单独的线程来监听传入的消息.
while (main thread not calling for receiver to quit) {
string message = tcpCon.tcpReceive(); // Relies on the recv() function
processIncomingMessage(message);
}
Run Code Online (Sandbox Code Playgroud)
这种工作方式有一个大问题.大多数情况下,循环将被阻塞,recv()因此接收器线程将不会退出.在没有强制线程终止几秒钟的情况下解决此问题的正确方法是什么?