我有多线程应用程序运行良好,除了以下场景: 最初我从管道16字节读取,然后根据标题我读取其余部分。
问题是有时客户端会写一条消息(比如300字节长),然后关闭连接。
我的服务器接收前16个字节,然后决定获取剩余的284个字节,但ReadFile返回错误233(管道的另一端没有进程。)
那么,那284个字节在哪里呢?我想他们应该在管道缓冲区或其他东西。
通过网络上的所有示例创建管道:
HANDLE h= CreateNamePipe(
name, // pipe name
PIPE_ACCESS_DUPLEX | // read/write access
FILE_FLAG_OVERLAPPED, // overlapped mode
PIPE_TYPE_MESSAGE | // message-type pipe
PIPE_READMODE_MESSAGE | // message read mode
PIPE_WAIT, // blocking mode
PIPE_UNLIMITED_INSTANCES, // unlimited instances
100000, // output buffer size
100000, // input buffer size
0, // client time-out
lpSecurityAttributes); // default security attributes
答案 0 :(得分:0)
正如WhozCraig所注意到的,客户端在DisconnectNamePIpe之前不会执行FlushFileBuffers。不幸。