{"id":329,"date":"2016-06-28T21:41:34","date_gmt":"2016-06-28T20:41:34","guid":{"rendered":"https:\/\/solidt.eu\/blog\/?p=329"},"modified":"2022-07-25T08:35:46","modified_gmt":"2022-07-25T07:35:46","slug":"nodejs-unix-domain-sockets","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/nodejs-unix-domain-sockets\/","title":{"rendered":"NodeJS &#8211; UNIX Domain Sockets"},"content":{"rendered":"<pre lang=\"javascript\" title=\"server.js\">\r\nvar net = require('net');\r\nvar socket = '\/tmp\/echo.sock';\r\n\r\nvar fs = require('fs');\r\nfs.unlink(socket, function(err, result) {}); \/\/ remove a existing socket file\r\n\r\nvar connect = function(socket) {\r\n    socket.on('end', function() {\r\n        \/\/ exec'd when socket other end of connection sends FIN packet\r\n        console.log('[socket on end]');\r\n    });\r\n    socket.on('data', function(data) {\r\n        \/\/ data is a Buffer object\r\n        console.log('[socket on data]', data.toString());\r\n    });\r\n    socket.on('end', function() {\r\n        \/\/ emitted when the other end sends a FIN packet\r\n    });\r\n\r\n    socket.on('timeout', function() {\r\n        console.log('socket', 'timeout');\r\n    });\r\n\r\n    socket.on('drain', function() {\r\n        \/\/ emitted when the write buffer becomes empty\r\n        console.log('[socket on drain]');\r\n    });\r\n    socket.on('error', function() {\r\n        console.log('socket', 'error');\r\n    });\r\n    socket.on('close', function() {\r\n        console.log('socket', 'close');\r\n    });\r\n    socket.pipe(socket);\r\n};\r\n\r\nvar server = net.createServer(connect);\r\nserver.listen(socket, function() {\r\n    fs.chmodSync(socket, '766');\r\n});\r\n\r\nserver.on('listening', function() {\r\n    var ad = server.address();\r\n    if (typeof ad === 'string') {\r\n        console.log('[server on listening] %s', ad);\r\n    } else {\r\n        console.log('[server on listening] %s:%s using %s', ad.address, ad.port, ad.family);\r\n    }\r\n});\r\n\r\nserver.on('connection', function(socket) {\r\n    server.getConnections(function(err, count) {\r\n        console.log('%d open connections!', count);\r\n    });\r\n});\r\n\r\nserver.on('close', function() {\r\n    console.log('[server on close]');\r\n});\r\nserver.on('err', function(err) {\r\n    console.log(err);\r\n    server.close(function() {\r\n        console.log(\"shutting down the server!\");\r\n    });\r\n});\r\n\r\n<\/pre>\n<pre lang=\"javascript\" title=\"client.js\">\r\nvar net = require('net');\r\nvar socket = \"\/tmp\/echo.sock\";\r\n\r\nvar client = net.createConnection(socket);\r\n\r\nclient.on(\"connect\", function() {\r\n    client.write('hello!');\r\n});\r\n\r\nclient.on(\"data\", function(data) {\r\n    console.log(\"returned\", data.toString());\r\n    client.destroy();\r\n});\r\n\r\n\r\nclient.on('close', function() {\r\n    console.log('Connection closed');\r\n});\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>var net = require(&#8216;net&#8217;); var socket = &#8216;\/tmp\/echo.sock&#8217;; var fs = require(&#8216;fs&#8217;); fs.unlink(socket, function(err, result) {}); \/\/ remove a existing socket file var connect = function(socket) { socket.on(&#8216;end&#8217;, function() { \/\/ exec&#8217;d when socket other end of connection sends FIN packet console.log(&#8216;[socket on end]&#8217;); }); socket.on(&#8216;data&#8217;, function(data) { \/\/ data is a Buffer object console.log(&#8216;[socket [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4],"tags":[],"class_list":["post-329","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=329"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/329\/revisions"}],"predecessor-version":[{"id":330,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/329\/revisions\/330"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}