相关疑难解决方法(0)

TCP套接字没有连接超时

我打开一个TCP套接字并将其连接到网络上其他位置的另一个套接字.然后,我可以成功发送和接收数据.我有一个计时器,每秒钟向套接字发送一些东西.

然后,我通过强行断开连接(在这种情况下拉出以太网电缆)粗暴地中断连接.我的套接字仍然报告它每秒都成功写出数据.这持续大约1小时30分钟,最终给出写入错误.

什么指定套接字最终接受另一端的超时消失了?它是操作系统(Ubuntu 11.04),它来自TCP/IP规范,还是套接字配置选项?

networking network-programming timeout tcp

40
推荐指数
1
解决办法
6万
查看次数

如何中断正在等待recv函数的线程?

我有一个套接字监听器挂在recv函数上:

size_t recvLen = recv(sock, buf, 512, 0);
Run Code Online (Sandbox Code Playgroud)

我想通过打断它来终止这个线程.MSDN说:

当发出阻塞的Winsock调用(例如recv)时,Winsock可能需要等待网络事件才能完成调用.在这种情况下,Winsock会执行可警告的等待,这可以通过在同一线程上安排的异步过程调用(APC)来中断.

我怎样才能做到这一点?

c++ sockets

9
推荐指数
1
解决办法
9718
查看次数

停止阻塞recv()的接收器线程

我有一个聊天应用程序,它有一个单独的线程来监听传入的消息.

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()因此接收器线程将不会退出.在没有强制线程终止几秒钟的情况下解决此问题的正确方法是什么?

c c++ sockets networking

6
推荐指数
2
解决办法
7966
查看次数

标签 统计

c++ ×2

networking ×2

sockets ×2

c ×1

network-programming ×1

tcp ×1

timeout ×1