Issues for LSPs that connect to local host
As discussed in my previous post, the autobind_lsp performs
hard binding. This will cause issues for LSPs that need to connect to
localhost.
About hard binding:
Hard binding is a per socket TCP options specified by:
WSAIoctl(..., SIO_UCAST_IF,..).
Once a socket is hard bound, all data on that socket must be
sent/received from the same adapter. In hard binding, the loop back
adapter is a distinct adapter.
When does hard binding cause a problem?
Hard binding causes a problem when you want your LSP to
connect to local host after a hard bind has occurred. In this case, you do not
want the hard binding to occur.
Example of common failure:
step 1) App:
connect (10.10.10.10)
step 2) autobind_lsp:
bind (10.10.10.10)
step 3) autobind_lsp:
WSAIoctl(…, SIO_UCAST_IF, …)
step 4) autobind_lsp:
connect (10.10.10.10)
step 5)
YourProxy_LSP: connect_to_your_proxy_server (127.0.0.1:1080)
step 5) Will fail since your socket is already hard bound to
adapter 10.10.10.10.
The work around:
A work around is to layer your LSP under autobind, and
not propagate the SIO_UCAST_IF IOCTLs to the next LSP in the stack.
When you should use the work around:
This work around should only be used for sockets on which
your LSP is explicitly proxying all data to a component you control. If
your LSP is not doing this, the workaround should not be used.
[Author: Igor Dvorkin]