Disabling Socket Pooling to Let Another Service Use Port 80
Learn how to let applications use the same port on different IP addresses.
July 29, 2003
We recently installed Microsoft Internet Information Services (IIS) 6.0 on a Windows Server 2003 system, and we're happy with the setup except for a problem with IP addresses. The server hosts a listserver that has a built-in Web server. We need IIS 6.0 to run on one IP address and the listserver's built-in Web server to run on another IP address. This setup worked fine on our Internet Information Server (IIS) 4.0 system, but after we moved to IIS 6.0, the listserver's Web server refuses to launch on port 80. What can we do to fix the problem?
When you install IIS 6.0, it claims for use port 80 of all IP addresses on the server. This situation first appeared with the introduction of socket pooling in IIS 5.0. By pooling resources that manage connections to TCP ports, developers were able to improve scalability over IIS 4.0. However, to let another service use port 80 on the same server running IIS 5.0, you had to configure a metabase property called DisableSocketPooling. For more information about socket pooling, visit the Win2K Server documentation page at http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/asp/apro9zon.htm.
In IIS 6.0, the DisableSocketPooling property is present but not functional. This lack of functionality is due to the http.sys kernel mode listener, which installs as part of Windows 2003 but doesn't listen for traffic until a program such as IIS configures it to do so. Because the http.sys listener is part of the OS, you must use the registry to configure it.
Microsoft has provided a utility called httpcfg.exe to facilitate some of the more complex settings related to http.sys. You can find the httpcfg.exe tool in the Windows Server 2003 CD-ROM Support Tools folder. The Help files explain how to use the tool, including how to configure the IP listen list for the http.sys driver.
To make the httpcfg.exe tool specify an address or addresses for http.sys to listen to, use the command
httpcfg set iplisten -i xxx.xxx.x.x:y
where xxx.xxx.x.x is the IP address and y is the port number.
Configuring the IP listen list might result in behavior that you don't expect. For example, if you have three IP addresses on a server and you configure the listen list for only one of them, you can still use the Internet Information Services Manager console to configure a Web site to operate on a nonconfigured address. The Web site will start as if it were working correctly but won't be reachable because the http.sys listener isn't configured for that IP address. This glitch could be difficult to troubleshoot later if you don't document how you configured your server's listen list. For more information about the DisableSocketPooling property, see the Microsoft article "IIS 6.0: Setting Metabase Property DisableSocketPooling Has No Effect" (http://support.microsoft.com/?id=813368).
—Brett Hill
About the Author
You May Also Like