我有一个API,它接受文件描述符作为参数,并在内部存储与文件描述符关联的某些状态。然后,在使用相同的文件描述符值进行后续调用时,可以查询先前生成的状态。
这基本上是有效的,但存在一种情况,即调用代码使用文件描述符调用我的API,然后关闭该文件描述符,接着分配一个新的文件描述符(通过socket()、accept()等),其整数值与现在关闭的文件描述符相同,然后将该新的文件描述符传递给我的API。此时,我的API执行错误操作,因为它错误地将旧套接字的状态与新的文件描述符相关联。
解决此问题的一种方法是强制调用代码在关闭套接字时通知我的API,以便我的API知道删除关联的状态...但我不想强迫用户这样做,因为这对他们来说很不方便,而且他们很可能会忘记这样做。
因此,我想知道是否有任何巧妙的方法可以告诉我们,在时间T时文件描述符仍与与之关联的结构相同,如同在时间(T-x)。如果我能做到这一点,我的API将足够智能,可以判断文件描述符整数值是否已被重复使用,并采取正确的行动。
FWIW,该代码旨在主要运行在MacOS/X和Linux下,但解决方案越通用,越好。
这基本上是有效的,但存在一种情况,即调用代码使用文件描述符调用我的API,然后关闭该文件描述符,接着分配一个新的文件描述符(通过socket()、accept()等),其整数值与现在关闭的文件描述符相同,然后将该新的文件描述符传递给我的API。此时,我的API执行错误操作,因为它错误地将旧套接字的状态与新的文件描述符相关联。
解决此问题的一种方法是强制调用代码在关闭套接字时通知我的API,以便我的API知道删除关联的状态...但我不想强迫用户这样做,因为这对他们来说很不方便,而且他们很可能会忘记这样做。
因此,我想知道是否有任何巧妙的方法可以告诉我们,在时间T时文件描述符仍与与之关联的结构相同,如同在时间(T-x)。如果我能做到这一点,我的API将足够智能,可以判断文件描述符整数值是否已被重复使用,并采取正确的行动。
FWIW,该代码旨在主要运行在MacOS/X和Linux下,但解决方案越通用,越好。
close
函数,但是真的,请不要这样做。我从未说过这个。这不是我在建议这么疯狂的事情。 - Mat