[
https://issues.apache.org/jira/browse/THRIFT-4372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16220656#comment-16220656
]
ASF GitHub Bot commented on THRIFT-4372:
----------------------------------------
Github user jeking3 commented on a diff in the pull request:
https://github.com/apache/thrift/pull/1402#discussion_r147185326
--- Diff: lib/csharp/src/Transport/TNamedPipeClientTransport.cs ---
@@ -88,7 +89,18 @@ public override void Write(byte[] buf, int off, int len)
throw new
TTransportException(TTransportException.ExceptionType.NotOpen);
}
- client.Write(buf, off, len);
+ // if necessary, send the data in chunks
+ // there's a system limit around 0x10000 bytes that we hit
otherwise
+ // MSDN: "Pipe write operations across a network are limited
to 65,535 bytes per write. For more information regarding pipes, see the
Remarks section."
+ var nBytes = Math.Min(len, 15 * 4096); // 16 would exceed the
limit
+ while (nBytes > 0)
+ {
+ client.Write(buf, off, nBytes);
+
+ off += nBytes;
+ len -= nBytes;
+ nBytes = Math.Min(len, nBytes);
--- End diff --
Shouldn't this be the same calculation as the one outside the loop?
Technically it doesn't have to be, however I found this confusing to read.
> Pipe write operations across a network are limited to 65,535 bytes per write.
> ------------------------------------------------------------------------------
>
> Key: THRIFT-4372
> URL: https://issues.apache.org/jira/browse/THRIFT-4372
> Project: Thrift
> Issue Type: Bug
> Components: C# - Library, Delphi - Library
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Critical
>
> {quote}Pipe write operations across a network are limited to 65,535 bytes per
> write. For more information regarding pipes, see the Remarks section.{quote}
> Source: [WriteFileEx
> function|https://msdn.microsoft.com/en-us/library/windows/desktop/aa365748(v=vs.85).aspx]
> I managed to run into exactly that limit today. Patch follows.
> Symptom is that
> * the writing end acts as if it had written all the bytes (in fact, it did)
> * but the remainder of ~ 65535 bytes is just lost somewhere and never
> reaches the reading end
> Consequently, the process at the reading end of the pipe gets stuck while
> waiting for the remaining bytes.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)