我编写了一个服务器,它打开一个命名管道(它会阻塞,所以它会等待客户端连接),然后定期向管道写入一些内容。客户端打开管道,从中读取并处理数据。但是,由于我无法控制的情况,客户端经常退出并在此后不久再次重新启动。
当服务器想要在没有读取器连接到管道的短时间内写一些东西时,这会导致问题:服务器收到一个 SIGPIPE 并退出。我可以忽略信号,但我不想丢失数据:理想情况下,服务器会等到客户端重新连接到管道后再写入数据。在此写入期间服务器阻塞是没有问题的。
使用write()我可以尝试 0 字节写入并检查EPIPE错误以检测是否有客户端连接。但是我怎样才能阻止直到客户端连接(除了稍微睡一觉,然后再次尝试写入)?
还是有另一种更好的方法来实现这一目标?