如何解决socket关闭后如何控制流量?
//pseudo code - actual code in c++
Process P1 code:
func handle_close() {
print "close";
}
func sayhello() {
print "hello";
}
func writeonsocketforP2() {
write(fd,somedata,somedata_sz);
}
func WritetoP2() {
count = 0;
while (count++ != 1000000) writeonsocketforP2();
sayhello();
}
考虑场景:
- 在进程 P1(单线程)和 P2 之间建立套接字连接
- P1 在循环中从 WritetoP2 函数向 P2 的套接字写入大量数据
- P2 在 P1 仍在写入时关闭,P1 收到套接字关闭事件并调用了关闭事件处理程序 handle_close..让我们说这是在计数为 1000 时发生的
- 在调用 handle_close 之后,控制将返回到 while 循环并从计数 1001 继续循环?
- 在WritetoP2的while循环中间套接字关闭后会调用sayhello()
解决方法
这就是为什么您需要检查 write()
是否返回写入套接字的错误代码(假设像 TCP
这样的面向连接的套接字)。 write()
如果在套接字上写入时发生错误(包括关闭的套接字),则返回 -1
。
此外,在您的代码中,sayhello()
在循环完成之前不会被调用。通常 WriteToP2()
需要另一个线程,除非您可以编写非阻塞代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。