Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for using Windows named pipes #16

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

HCanber
Copy link

@HCanber HCanber commented Apr 7, 2016

Background

One very common way of hosting node applications on Windows is to host them in IIS using iisnode.

iisnode provides the available port as a Windows named pipe and not as a port number in the environment variable port. Node can open named pipes, however the parse_address() function in utils.js does not allow them, so Sinopia cannot be hosted in iisnode on Windows.

This PR fixes that.

What's changed

This PR does not change any of the existing behavior, if a port number or url has been specified it's still used.

However, if it's not one of those a check is made to see if the incoming port looks like a Windows named pipe, and in that case uses that.
This PR also fixes logging so correct protocol is logged, and add tests for Windows named pipes.

How to host Sinopia in iisnode

With this PR Sinopia can be used in iisnode by creating a project, npm install --save sinopia2 and then create index.js:

process.argv.push('--listen', process.env.PORT || '4873')
require('./node_modules/sinopia2/lib/cli')

Configure iisnode to use index.js as start file.

Named pipes

A named pipe in Windows has the format:
\\.\pipe\PipeName

  • The period specifies the local computer
  • The pipe name string specified by PipeName can include any character
    other than a backslash, including numbers and special characters.

From: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365783(v=vs.85).aspx

When hosting Sinopia on Windows' IIS using iisnode, iisnode provides
the available port as a Windows named pipe. Node supports these, however
the parse_address() function in utils.js does not.

A named pipe in Windows has the format:
\\.\pipe\PipeName

The period specifies the local computer
The pipe name string specified by PipeName can include any character
other than a backslash, including numbers and special characters.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365783(v=vs.85).aspx
@dgaya
Copy link
Collaborator

dgaya commented Apr 20, 2016

Looks good. Waiting for +1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants