情况如下:我有两台机器,A 和 B。A 监听一个端口 p。B 创建一个套接字 s1 并连接到 p。A 接受套接字 s2 中的连接。目前,A 和 B 可以通过套接字相互通信。
但是,如果我杀死 A 中的程序,然后在一段时间后重新启动该程序,B 不知道,因为在此期间它没有向 A 发送任何数据。现在 B 开始通过 s1 向 A 写入数据。接下来会发生什么?为什么?
实际上我发现write
呼叫没有失败,但A仍然没有得到数据。更重要的是,如果我把 s1 放在 epoll 设备中,我发现返回的事件epoll_wait
是EPOLLERR | EPOLLHUP
在调用write
. 为什么?
不幸的是,在这种情况下,它似乎丢失了数据,因为“写”调用没有失败,但 A 无法获取数据。有什么解决办法吗?