Category Archives: MATLAB

Get pnet to do UDP blocking

Pnet is a MEX-file-based toolbox for Octave/MATLAB. The help instructions would lead you to believe that UDP reads block by default, but this didn’t work for me: I had to specify a timeout. You can specify Inf, but given that you can’t ctrl-c out of a program whilst the MEX part is running, I’d recommend choosing a reasonable value (like 20, = 20 seconds).

Here’s a simple example:
pnet('closeall');
sock=pnet('udpsocket',10000);
pnet(sock,'udpconnect','127.0.0.1',1000);
pnet(sock,'setreadtimeout',20)
pnet(sock,'printf','*r');
pnet(sock,'writepacket');
pnet(sock,'readpacket');
data = pnet(sock, 'read')

Compiling pnet (or any other MEX file) with Visual Studio Express and Octave

Octave supports MEX files, just like MATLAB. Here’s how to compile a MEX file (in my case pnet):

  • Run Developer Tools (2012)
  • Change Octave’s math.h to specify correct MS math.h
  • Add Octave ‘bin’ folder to path
  • Change to the folder with the files
  • Run command:
    mkoctfile --mex -lws2_32.lib -DWIN32 -v -o pnet pnet.c
  • The last command fails because a random .lib gets added somehow. Run manually (change paths for your installation):
    link -nologo -DLL -out:pnet.mex pnet.o ws2_32.lib -LIBPATH:C:\bin\Octave-3.6.4\lib\octave\3.6.4 -LIBPATH:C:\bin\Octave-3.6.4\lib octinterp.lib octave.lib cruft.lib -export:mexFunction -incremental:no dirent.lib msvcmath.lib
    I’ve forgotten how I figured that out, so sorry if I’m not giving credit if it’s due somewhere!