日期:2014-05-16  浏览次数:20758 次

关于使用epoll,网络中断的问题。
1.在linux网络编程中, 采用epoll+非阻塞的socket向对端发送数据,是否执行send命令,把数据提交把TCP缓冲区后,就立刻返回发送成功。如果网络拥塞严重或者网速比较慢,当缓冲区还有数据的时候,网络发生中断,应用程序如何知道哪些数据成功被发送?

2.server端向client端发送数据,client成功接收到数据,TCP要返回ACK应答的时候,网络中断,client执行recv是否能够收到数据? 那些数据是否已经被丢弃?

谢谢你们的帮助

------解决方案--------------------
1.在linux网络编程中, 采用epoll+非阻塞的socket向对端发送数据,是否执行send命令,把数据提交把TCP缓冲区后,就立刻返回发送成功。如果网络拥塞严重或者网速比较慢,当缓冲区还有数据的时候,网络发生中断,应用程序如何知道哪些数据成功被发送。

使用应用层的发送缓冲并维护之。send的返回码告诉你系统实际发送了多少或是错误发生。

2.server端向client端发送数据,client成功接收到数据,TCP要返回ACK应答的时候,网络中断,client执行recv是否能够收到数据? 那些数据是否已经被丢弃? 

不懂你的意思,client收到数据指的什么,是client所在的机器的操作系统收到数据么,如果是,则client执行recv能收到数据。