UNPKG

sctp

Version:

SCTP network protocol (RFC4960) in plain Javascript

100 lines (85 loc) 2.33 kB
#!/usr/bin/node const util = require('util') const fs = require('fs') const ip = require('ip') const sctp = require('../lib') const port = 3000 sctp.defaults({ rto_initial: 500, rto_min: 300, rto_max: 1000, sack_timeout: 100, sack_freq: 2 }) const fileName = '' let count = 0 const server = sctp.createServer(socket => { const start = Date.now() count = 0 console.log( 'remote socket connected from', socket.remoteAddress, socket.remotePort ) if (fileName) { socket.pipe(fs.createWriteStream(fileName)) } const streamOut = socket.createStream(2) streamOut.on('error', error => { console.log(error.message) }) socket.on('stream', (streamIn, id) => { console.log('< new sctp stream', id) // Uncomment to receive data streamIn.on('data', data => { // Incoming data // console.log('< received data on stream', data.length, 'bytes') streamOut.write(data) }) }) socket.on('data', () => { count++ // Io impacts performance // console.log('< server received', data.length, 'bytes') // Send data back // if (!socket.destroyed) socket.write(data) }) socket.on('error', error => { console.log(error.message) }) socket.on('end', () => { const duration = Date.now() - start const rate = Math.floor(socket.bytesRead / duration / 1024 / 1024 * 100000) / 100 const ratePackets = ~~(count / duration * 1000) console.log( util.format( '%d packets, %d bytes read, %d bytes sent, rate %d MB/s, %d packets/sec', count, socket.bytesRead, socket.bytesWritten, rate, ratePackets ) ) if (fileName) { console.log('Contents of piped file (first 100 bytes):') console.log(fs.readFileSync(fileName).slice(0, 100).toString()) } }) }) server.on('error', error => { console.error(error.message) process.exit() }) server.listen({ OS: 10, MIS: 10, port }, () => { console.log('server started on port %d', port) console.log('now run test, for example:') console.log( util.format('sctp_test -H <ip> -h <%s or other local ip> -p %d -s -P <port> -x 10000 -d0 -c 1', ip.address(), port) ) }) process.on('SIGINT', () => { console.log('SIGINT') // Todo close socket setTimeout(() => { console.log('exiting') process.exit() }, 100) })