Kir*_*rov 6 c c++ unix sockets client-server
假设我有一个服务器应用程序 - 使用UNIX套接字通过TCP连接.
连接是异步的 - 换句话说,客户端和服务器的套接字是非阻塞的.
假设以下情况:在某些情况下,服务器可能决定将某些数据发送到连接的客户端并立即关闭连接:使用shutdown
with SHUT_RDWR
.
所以,我的问题是 - 是否有保证,当客户端调用时recv
,它会收到(由服务器发送)数据?
或者,要接收数据,recv
必须在服务器之前调用shutdown
?如果是这样,我应该做什么(或者,更确切地说,我该怎么做),以确保客户收到数据?
您可以使用"setsockopt(SO_LINGER)"控制此行为:
SO_LINGER如果存在数据,则等待完成关闭功能.如果启用此选项并且在调用close函数时存在未发送的数据,则在关闭函数期间将阻止调用应用程序,直到数据被传输或连接超时.close函数返回而不阻塞调用者.此选项仅对流套接字有意义.
也可以看看:
无法保证您将收到任何数据,更不用说这些数据,但是套接字关闭时待处理的数据与所有其他数据一样受到保证:如果它到达它将按顺序到达并且没有损坏且受TCP最佳限制努力.
NB'异步'和'非阻塞'是两个不同的东西,而不是同一个东西的两个术语.
归档时间: |
|
查看次数: |
2675 次 |
最近记录: |