我有一段使用命名管道进行消息模式(PIPE_TYPE_MESSAGE)和带有重叠I/O(FILE_FLAG_OVERLAPPED)的服务的真正老代码。
该代码执行以下操作:
1. 使用带有重叠I/O(头部+消息长度)的ReadFile读取4个字节。客户端使用WriteFile调用编写了此命令。 2. 读取完4个字节后,调用ReadFile以已知长度读取其余消息,而不指定OVERLAPPED结构。 3. 命令执行后,例程继续在第1阶段,并等待下一个命令。
当我阅读文档时,发现重叠操作需要使用设置了FILE_FLAG_OVERLAPPED标志的文件、命名管道或通信设备。当线程调用函数(如ReadFile函数)执行重叠操作时,调用线程必须指定指向OVERLAPPED结构的指针。(如果此指针为NULL,则函数返回值可能会错误地指示操作已完成。)
因此,我必须假设这段代码将无法工作或者至少是错误的...
实际上,这段代码已经15年了,在数百台机器上运行良好,没有问题。
那么我是否需要告诉我的老板和同事,这段代码存在缺陷,它只是幸运地工作,需要进行更正?
该代码执行以下操作:
1. 使用带有重叠I/O(头部+消息长度)的ReadFile读取4个字节。客户端使用WriteFile调用编写了此命令。 2. 读取完4个字节后,调用ReadFile以已知长度读取其余消息,而不指定OVERLAPPED结构。 3. 命令执行后,例程继续在第1阶段,并等待下一个命令。
当我阅读文档时,发现重叠操作需要使用设置了FILE_FLAG_OVERLAPPED标志的文件、命名管道或通信设备。当线程调用函数(如ReadFile函数)执行重叠操作时,调用线程必须指定指向OVERLAPPED结构的指针。(如果此指针为NULL,则函数返回值可能会错误地指示操作已完成。)
因此,我必须假设这段代码将无法工作或者至少是错误的...
实际上,这段代码已经15年了,在数百台机器上运行良好,没有问题。
那么我是否需要告诉我的老板和同事,这段代码存在缺陷,它只是幸运地工作,需要进行更正?