1

我的多线程应用程序运行良好,除了以下情况:最初我从管道中读取 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
4

1 回答 1

0

As WhozCraig noticed, client does not do FlushFileBuffers before DisconnectNamePIpe. Unfortunately.

于 2013-06-15T08:36:51.317 回答