客户端关闭另一端后,ReadFile命名为管道

时间:2013-06-15 07:47:41

标签: winapi networking named-pipes

我有多线程应用程序运行良好,除了以下场景: 最初我从管道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

1 个答案:

答案 0 :(得分:0)

正如WhozCraig所注意到的,客户端在DisconnectNamePIpe之前不会执行FlushFileBuffers。不幸。