1818import os
1919import json
2020import asyncio
21+ import socket
2122import unittest
2223import pathlib
2324import logging
@@ -111,10 +112,21 @@ def handle_servers_addresses(
111112 assert server_name not in self .servers
112113 self .servers [server_name ] = _ServerDescr ()
113114
114- # Create applications.
115- for server_descr in self .servers .values ():
115+ server_sockets = {}
116+
117+ # Create applications and sockets.
118+ for server_name , server_descr in self .servers .items ():
116119 server_descr .app = web .Application ()
117120
121+ sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
122+ sock .bind (("127.0.0.1" , 0 ))
123+ sock .listen (10 )
124+ server_sockets [server_name ] = sock
125+
126+ hostaddr , port = sock .getsockname ()
127+ server_descr .url = "http://{host}:{port}" .format (
128+ host = hostaddr , port = port )
129+
118130 # Server test page from origin server.
119131 self .servers ["origin" ].app .router .add_route (
120132 "GET" , "/" , handle_test_page )
@@ -128,20 +140,6 @@ def handle_servers_addresses(
128140 app .router .add_route ("GET" , "/cors_resource" , handle_resource ,
129141 name = "cors_resource" )
130142
131- # Start servers.
132- for server_name , server_descr in self .servers .items ():
133- handler = server_descr .app .make_handler ()
134- server = yield from create_server (handler , self .loop )
135- server_descr .handler = handler
136- server_descr .server = server
137-
138- hostaddr , port = server .sockets [0 ].getsockname ()
139- server_descr .url = "http://{host}:{port}" .format (
140- host = hostaddr , port = port )
141-
142- self ._logger .info ("Started server '%s' at '%s'" ,
143- server_name , server_descr .url )
144-
145143 cors_default_configs = {
146144 "allowing" : {
147145 self .servers ["origin" ].url :
@@ -187,6 +185,17 @@ def handle_servers_addresses(
187185 else :
188186 server_descr .cors .add (route )
189187
188+ # Start servers.
189+ for server_name , server_descr in self .servers .items ():
190+ handler = server_descr .app .make_handler ()
191+ server = yield from create_server (handler , self .loop ,
192+ sock = server_sockets [server_name ])
193+ server_descr .handler = handler
194+ server_descr .server = server
195+
196+ self ._logger .info ("Started server '%s' at '%s'" ,
197+ server_name , server_descr .url )
198+
190199 @asyncio .coroutine
191200 def stop_servers (self ):
192201 for server_descr in self .servers .values ():
0 commit comments