2014-01-19 54 views
0

的端口我做了一個簡單的代理服務器使用雙絞線更改重定向扭曲代理

destination = portforward.ProxyFactory(dest_host, dest_port) 
reactor.listenTCP(listen_port, destination) 
reactor.run() 

我想改變在一定條件下dest_port,而無需重新啓動服務器。

我想:

new_dest = portforward.ProxyFactory(dest_host, new_dest_port) 
reactor.listenTCP(listen_port, new_dest) 

當然,這在使用中的異常已經產生的地址。

這是可能的操作過程中更改代理目的地是哪裏?

回答

1

reactor.listenTCP返回一個對象,它提供IListeningPort具有stopListening方法,其停止在該端口上的服務器(注意,它返回一個Deferred和服務器不實際停止直到Deferred火災)。

在第二個listenTCP調用之前,您可以使用此stopListening方法釋放服務器端口以供新的重新配置的服務器使用。

+0

此解決方案主要工作,所有新的連接現在被髮送到新的端口。但是,建立的連接會繼續將數據發送到已停止的代理端口。任何想法,爲什麼?我期望(並希望)現有連接在端口改變時被重定向。有任何想法嗎? –

+0

使用'stopListening'和'listenTCP'做事情只會影響偵聽端口。聆聽端口是一個獨特的事物。當連接嘗試到達偵聽端口時,會創建一個新的服務器端連接對象來表示它(通常是傳輸和協議)。然後傳輸和協議完全獨立於監聽端口。港口發生的任何事情都不會對這些連接產生影響。如果你想要改變這些連接的行爲,你就必須改變處理它們的協議。 –