6

I'm running some performance testing, and I'm trying to send the same file repeatedly to a socket.

If I do something like:

$ socat -b1048576 -u OPEN:/dev/zero TCP4-LISTEN:9899,reuseaddr,fork 
$ socat -b1048576 -u TCP:127.0.0.1:9899 OPEN:/dev/null

Then with that 1MB buffer iftop tells me that I'm pushing 20Gbps.

However, what I'm really trying to do is something more like:

$ socat -b1048576 -u OPEN:somefile.dat TCP4-LISTEN:9899,reuseaddr,fork 
$ myprog TCP:127.0.0.1:9899 > /dev/null

But it only pushes that somefile.dat one time, I'd really like it to rewind() to the beginning and send it again.

Alun
  • 409
  • 1
  • 4
  • 7

1 Answers1

6

Assuming that you want to open and send the same file at each new connection, you can use -U, the reverse direction to -u, and the reversed addresses, as in the following

socat -b1048576 -U TCP4-LISTEN:9899,reuseaddr,fork OPEN:somefile.dat
socat TCP:127.0.0.1:9899 - >/dev/null

If you want the file to repeat ad infinitum, you can use something like this:

socat -b1048576 -U TCP4-LISTEN:9899,reuseaddr,fork SYSTEM:'while cat somefile.dat;do \: ;done'
meuh
  • 49,672
  • 2
  • 52
  • 114
  • That's pretty close to what I wanted, but it does force the client to reconnect each time. – Alun Apr 22 '16 at 03:47
  • @Alun if you want an infinite file, like `/dev/zero` you can add a loop, see my updated answer. – meuh Apr 22 '16 at 06:12
  • 1
    Thanks. I think that's the best that can be done. Was really hoping for something that would be functionally equivalent to `while(1) sendfile(soc, file, 0, size);` for maximum performance... – Alun Apr 27 '16 at 03:57