And*_*zos 5 c sockets linux tcp
在TCP中,我们说连接的一侧执行"主动关闭"而另一侧执行"被动关闭".
就Linux套接字API而言,您如何区分主动关闭和被动关闭?
例如,假设我们有两个连接的Linux TCP套接字A和P,它们通过应用程序级协议交换信息,并且它们都知道是时候关闭它们的套接字(既不希望发送或接收更多数据到或彼此).
我们希望套接字A执行主动关闭,而P则是被动关闭.
A和P可以做一些事情.例如:
这些东西的组合以及A应按什么顺序进行?......以及这些东西的组合以及P应按什么顺序进行?
就Linux套接字API而言,如何区分主动关闭和被动关闭?
“主动”关闭就是套接字的哪一侧首先发送FIN或RST数据包,通常通过调用close().
A 应该如何组合这些事情以及以什么顺序进行?……P 应该如何组合这些事情以及以什么顺序进行?
实际上,其中大部分是特定于应用程序和应用程序协议的。我将描述回答您的问题的最低/典型要求,但您的里程可能会有所不同,具体取决于您具体想要完成的任务。
如果您想终止套接字 A 上一个方向或另一个方向(或两个方向)的通信,您可以首先调用套接字A。根据您的描述,两个程序已经知道它们已完成,可能是由于应用程序协议消息,因此这可能shutdown()没有必要。
您必须调用close()套接字 A 才能关闭套接字并释放文件描述符。
在套接字 P 上,您只需继续读取直到recv()returns 0,然后您必须 调用close()以关闭套接字并释放文件描述符。
为了进一步阅读,有很多很好的教程,Beej 的网络编程指南非常受欢迎。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |