7

Say a server created a named pipe "myTestPipe". How many clients can connect to "myTestPipe"? From what I have read on the Web, it seems only one client can, but wanted to make sure.

If only one, then it's best to use the blocking WaitForConnection() instead of the Asunchronous method BeginWaitForConnection() as the server will wait until a client process connects and then do the communication?! (no need to worry about other clients to connect)

Derar
  • 462
  • 1
  • 4
  • 12

2 Answers2

10

You can have more than one client connect to the same named pipe. On Windows, I believe the current limitation is 256 simultaneous connections to a single named pipe, including the server's connection.

(Unfortunately, I can't track down the appropriate MSDN page for reference, but this CPAN pipes reference mentions this limitation.)

Reed Copsey
  • 554,122
  • 78
  • 1,158
  • 1,373
  • 1
    Thanks for your response. I have a question though: I am implementing a server that receives binary files that are sent by NamedPipeClients through a named pipe. Assume that I have a multi-threaded NamedPipeClient where I can instantiate more than one thread to send files at the same time. How would it be possible for the server to distinguish the source client that has actually sent these bytes? Perhaps my question should be: when more than one client is writing data into the pipe, is it overlapped with others' in such a way you can't tell who sent what? hope it's explained well! thanks again – Derar Aug 14 '09 at 17:42
  • 2
    There are actually a couple of different options here, including using overlapped I/O, multithreading, or completion routines. MSDN has good documentation (including all 3 options) of handling multiple client connections from a single server here: http://msdn.microsoft.com/en-us/library/aa365594%28VS.85%29.aspx – Reed Copsey Aug 14 '09 at 18:39
  • 1
    It is important in the above, to keep in mind that a single server pipe instance can handle only a single client. A given _named pipe_ can handle multiple connections, but each of those connections still needs to be waited for and handled by a separate server pipe instance. Once a server pipe instance has connected, it cannot be used for additional connections until the current connection is disconnected and the server pipe can wait for another. The answer above is consistent with the facts, but doesn't make them clear, due to the confusion between what's a named pipe and a server pipe object. – Peter Duniho Jul 25 '17 at 21:36
10

You actually create one pipe and wait for a connection, and when it connects, create a second one and wait on it.

For each pipe you create and wait for connection on, you get at most one connection (at a time - you can recycle them if they are request/response/close style).

Thus, each connection is 1-to-1, like a socket or other stream.

  • 1
    How do you handle when there are too many clients connecting too fast situation? I made myself spammer performing 20 requests to my server that uses your approach, but after 2-3 client connections, the rest of the request would attempt to connect to the existing pipe, but by the time they try to send request, the pipe is already closed. Is there a way to either limit the number of connection per `NamedPipeServerStream`? – codenamezero Oct 18 '17 at 17:04