{"record":{"id":"d3bbd8e218fd4d64","repo":"denoland/deno","slug":"err-fs-cp-socket","errorCode":"ERR_FS_CP_SOCKET","errorMessage":"Cannot copy a socket file","messagePattern":"Cannot copy a socket file","errorType":"exception","errorClass":"NodeSystemError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/_fs/cp/cp.ts","lineNumber":100,"sourceCode":"      });\n    case \"EEXIST\":\n      throw new ERR_FS_CP_EEXIST({\n        message: err.message,\n        path: err.path,\n        syscall: \"cp\",\n        errno: EEXIST,\n        code: \"EEXIST\",\n      });\n    case \"EISDIR\":\n      throw new ERR_FS_EISDIR({\n        message: err.message,\n        path: err.path,\n        syscall: \"cp\",\n        errno: EISDIR,\n        code: \"EISDIR\",\n      });\n    case \"SOCKET\":\n      throw new ERR_FS_CP_SOCKET({\n        message: err.message,\n        path: err.path,\n        syscall: \"cp\",\n        errno: EINVAL,\n        code: \"EINVAL\",\n      });\n    case \"FIFO\":\n      throw new ERR_FS_CP_FIFO_PIPE({\n        message: err.message,\n        path: err.path,\n        syscall: \"cp\",\n        errno: EINVAL,\n        code: \"EINVAL\",\n      });\n    case \"UNKNOWN\":\n      throw new ERR_FS_CP_UNKNOWN({\n        message: err.message,\n        path: err.path,","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/ext/node/polyfills/_fs/cp/cp.ts#L82-L118","documentation":"When the native cp validation resolves a path (src, dest, or a symlink target under dereference:true) to a Unix domain socket, throwCpError maps kind 'SOCKET' to ERR_FS_CP_SOCKET ('Cannot copy a socket file'). fs.cp deliberately refuses sockets because they have no content to copy.","triggerScenarios":"await fsp.cp('/var/run/app', '/backup/app') where /var/run/app is a .sock socket; recursive copy of a runtime directory containing docker.sock or postgres socket files with dereference enabled.","commonSituations":"Backing up /var/run, /tmp, or state directories that contain live sockets; copying node_modules or runtime dirs where a dev server left its socket.","solutions":["Use opts.filter to skip socket files: filter: (s) => !isSocketSync(s)","Back up only known file trees instead of whole runtime directories","If a stale socket blocks the copy, remove it (sockets are not data)"],"exampleFix":"// before\nawait fsp.cp('/var/run/app', '/backup/app', { recursive: true, dereference: true });\n\n// after\nawait fsp.cp('/var/run/app', '/backup/app', {\n  recursive: true,\n  dereference: true,\n  filter: (s) => (fs.lstatSync(s).isSocket?.() ?? false) === false,\n});","handlingStrategy":"validation","validationCode":"const filter = (s) => { const st = fs.lstatSync(s); return !(st.isSocket?.() ?? false); };\nawait fsp.cp(src, dest, { recursive: true, dereference: true, filter });","typeGuard":"function isSocketPath(p) { try { return fs.lstatSync(p).isSocket(); } catch { return false; } }","tryCatchPattern":"try { await fsp.cp(src, dest, { recursive: true, dereference: true }); } catch (e) { if (e.code === 'ERR_FS_CP_SOCKET') { /* exclude socket and retry */ } else throw e; }","preventionTips":["Exclude runtime/socket directories (/run, /var/run) from backups","Add a filter that skips special file types on recursive copies","Unlink stale sockets instead of trying to back them up"],"tags":["node-compat","fs","cp","socket","unix"],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}