例如,如果您关闭一个管道或套接字,而该管道或套接字的写入缓冲区中仍有数据尚未被另一端的进程读取,那么 close() 是否会阻塞,直到读取数据或其他进程终止?
答案1
如果未设置 O_NONBLOCK 并且没有为 STREAM 发布信号,并且模块的写入队列上有数据,则 close() 应等待未指定的时间(对于每个模块和驱动程序),以便在拆除之前排出任何输出流。
和:
如果 fildes 引用套接字,close() 将导致套接字被销毁。如果套接字处于连接模式,并且为具有非零延迟时间的套接字设置了 SO_LINGER 选项,并且套接字有未传输的数据,则 close() 将阻塞直到当前的延迟时间间隔,直到所有数据都传输完毕。