【发布时间】:2013-06-11 20:42:29
【问题描述】:
我的多线程应用程序运行良好,但以下情况除外: 最初我从管道中读取 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
【问题讨论】:
-
好的,在断开管道之前检查您的客户端是否正在调用
FlushFileBuffers()。 (它应该在CloseHandle()之前使用DisconnectNamedPipe())。 -
WhozCraig,感谢您的评论。但不幸的是我无法修改客户端。它的第 3 方计划。
标签: winapi networking named-pipes