[ This is still in draft form. It must be expanded and re-written. ]
[Support for EXTERNAL SOCKETS has been removed from trunk]
An external socket is a connection between two processes, where only
one of the processes is under DMTCP checkpoint control.
In the longer run, we want to offer users configure options about what
to do with "external sockets" at checkpoint time.
Reasonable choices for this are:
1) the external sockets are temporary; don't checkpoint yet, and
the application will close the sockets; DMTCP can block any thread
that tries to open a new socket, if it is waiting to do a checkpoint.
[ This is the choice made with the config flag: --condor-mode ]
2) go ahead and checkpoint immediately; but don't save any external
sockets, and don't restore them; On restart, the application will
see that socket as a "dead socket", and should use its own error
recovery to create a new socket if needed.
[ DMTCP does this now for certain special cases. One example is that
vim will open a connection to the X-Window server. On restart,
we can't restart the X-Window server. So, we make the socket
appear to be a dead socket on restart. (Philsophy: Well-behaved
applications should not assume that very long-lived connections
will continue forever (e.g. due to temporary network outage), and
should have an error recovery strategy.) ]
Besides vim, another good example of software that silently creates
an external socket is: getpwuid() in libc.so when LDAP is configured.
For implementation details, some items of note are:
connection.cpp: case TCP_EXTERNAL_CONNECT:
Notice that in:
If DMTCP did not record a particular connection (e.g. done in the case
of the special LDAP ports), and if it is of type 'socket', then
is is marked TCP_EXTERNAL_CONNECT and not restored.
It maintains blacklistedRemotePorts (currently only the LDAP ports),
and at restart time, those connections will be recreated as dead sockets.
(As of rev. 1270, this is not done for vim connecting to X-Windows.
The X-Windows port is simply closed. But this would be an alternative