Changes

Jump to navigation Jump to search
547 bytes removed ,  10:16, 21 September 2016
m
no edit summary
Line 1: Line 1:  
== Unix sockets initial support ==
 
== Unix sockets initial support ==
   −
Currently it can only work with stream and dgram sockets, which have no skbs in queues
+
Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6, TCP in Listen and (!) [[TCP connection|Established states]] and Netlink ones.
(listening or established -- both work OK). If there are skbs in queue the dumping
  −
procedure will fail.
     −
The cpt part uses the sock_diag engine that was merged to Dave recently to
+
The cpt part uses the sock_diag engine to collect extended information about socket, then CRIU uses the files dumping engine to get access to sockets state.
collect sockets. Then it dumps sockets by checking the filesystem ID of a
  −
failed-to-open through /proc/pid/fd descriptors (sockets do not allow for
  −
such tricks with opens through proc) against SOCKFS_TYPE.
     −
The restore part is more tricky. Listen sockets are just restored, this is simple.
+
The restore part of Unix sockets is the most tricky part. Listen sockets are just restored, this is simple.
 
Connected sockets are restored like this:
 
Connected sockets are restored like this:
   Line 18: Line 13:  
# ... all listening sockets call accept() and ... dup2 the new fd into the accepting end.
 
# ... all listening sockets call accept() and ... dup2 the new fd into the accepting end.
   −
There's a problem with this approach -- socket names are not preserved, but
+
There's a problem with this approach -- socket names are not preserved, but looking into our OpenVZ implementation I think this is OK for existing apps.
looking into our OpenVZ implementation I think this is OK for existing apps.
     −
=== What should be done next ===
+
[[Category:Under the hood]]
 
+
[[Category:Sockets]]
* Need to merge the file IDs patches in our tree and make Andrey to support files sharing. This will solve the
  −
 
  −
<code>
  −
sk = socket();
  −
fork();
  −
</code>
  −
 
  −
case. Currently it simply doesn't work :(
  −
* Need to add support for in-flight connections
  −
* Implement support for UDP sockets (quite simple)
  −
* Implement support for listening TCP sockets (also not very complex)
  −
* Implement support for connected TCP scokets (hard one)
 

Navigation menu