Я попытался создать простой TCP-эхо-сервер, который сначала считывает все входные данные, прежде чем отправляет его копию.
var net = require('net');
var server = net.createServer(function(socket) {
socket.write('Echo server\r\n');
//socket.pipe(socket)
socket.UsrData='';
socket.on('data', function(chunk){
socket.UserData+=chunk;
});
socket.on('end', function(){
console.log('end');
socket.end(socket.UserData);
});
});
server.listen(1337, 'localhost');
Теперь, если я отправлю файл на этот сервер с
nc -q0 localhost 1337 </etc/profile
сбой сервера:
end
events.js:183
throw er; // Unhandled 'error' event
^
Error: This socket has been ended by the other party
at Socket.writeAfterFIN [as write] (net.js:364:12)
at Socket.Writable.end (_stream_writable.js:563:10)
at Socket.end (net.js:509:31)
at Socket.<anonymous> (/home/petr/f/learn/nodejs/echo.js:20:11)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
Как это исправить?
(я бы хотел, чтобы сервер работал как
socat TCP4-LISTEN:1337,reuseport,fork EXEC:'./slurp'
, где ./slurp
- это что-то вроде:
#!/bin/sh -eu
inp=$(cat)
printf '%s\n' "$inp"
)