【发布时间】:2012-01-26 09:25:56
【问题描述】:
我有一个使用文件描述符作为参数调用的 API,它在内部存储与文件描述符相关的一些状态。然后在使用相同文件描述符值的后续调用中,可以查阅先前生成的状态。
这大部分都有效,除了调用代码使用文件描述符调用我的 API,然后关闭文件描述符,然后分配一个新的文件描述符(通过 socket() 或 accept() 等)具有与现在关闭的相同的整数值,然后将该新文件描述符传递给我的 API。那时,我的 API 做错了,因为它错误地将旧套接字的状态与新文件描述符相关联。
此问题的一个解决方案是强制调用代码在关闭套接字时通知我的 API,以便我的 API 知道删除关联的状态....但我不希望强制用户这样做,因为这对他们来说很不方便,而且他们很容易忘记这样做。
因此,我想知道是否有任何聪明的方法来判断时间 T 的文件描述符是否仍与它在时间 (T-x) 关联的相同底层结构相关联。如果我能做到这一点,我的 API 就会足够智能,可以判断文件描述符整数值何时被重用并做正确的事情。
FWIW 此代码主要用于在 MacOS/X 和 Linux 下运行,但解决方案越便携越好。
【问题讨论】:
标签: c sockets file-descriptor