| Line 3: |
Line 3: |
| | Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6 and TCP in Listen and (!) [[TCP connection|Established states]]. | | Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6 and TCP in Listen and (!) [[TCP connection|Established states]]. |
| | | | |
| − | 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 it drains sockets from the target tasks using SCM_RIGHTS sending. |
| − | 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 16: |
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 ===
| |
| − | | |
| − | * socket filter (SK_ATTACH_FILTER)
| |
| − | * various (ip/tcp level) sockoptions
| |
| | | | |
| | [[Category:Under the hood]] | | [[Category:Under the hood]] |