/usr/share/octave/packages/ocs-0.1.5/utl/utl_sbn_server.m is in octave-ocs 0.1.5-2+deb9u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | ## Copyright (C) 2006,2007,2008 Carlo de Falco
##
## This file is part of:
## OCS - A Circuit Simulator for Octave
##
## OCS is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program (see the file LICENSE); if not,
## see <http://www.gnu.org/licenses/>.
##
## author: Carlo de Falco <cdf _AT_ users.sourceforge.net>
## -*- texinfo -*-
## @deftypefn{Function File} {} utl_sbn_server(@var{port})
## Listen for socket connections on port @var{port}, read a command @
## and return the corresponding output to the socket.
## @end deftypefn
function utl_sbn_server (portnum)
QUITMESSAGE = "quit UTLsbnserver";
CONFIRMMESSAGE = "confirmed";
## CREATE THE SOCKET AND WAIT FOR CONNECTIONS
s = socket(AF_INET, SOCK_STREAM, 0);
if s < 0
error("cannot create socket\n");
end
if bind(s, portnum) < 0
error("bind failed\n");
end
if listen(s, 1) < 0
error("listen failed\n");
end
##MAIN LOOP
while 1
##ACCEPT CONNECTIONS
c = accept(s);
if c < 0
error("connection error")
end
## READ COMMANDS FROM THE SOCKET
msg = readstring (c)
##IF CLIENT SENT SHUTDOWN MESSAGE EXIT
if strcmp (msg,QUITMESSAGE)
printf("client requested server shutdown, goodbye!\n");
disconnect(c); disconnect(s);
break
end
##EXECUTE COMMANDS FROM THE CLIENT
[A,B,C] = eval(msg);
##SEND OUTPUT TO THE CLIENT
str = [ sprintf("%17g ",A) "\n" sprintf("%17g ",B)...
"\n" sprintf("%17g ",C) "\n"]
send(c,str);
##END CONNECTION
disconnect(c);
end
disconnect(s);
endfunction
function msg = readstring (c)
BUFFER_SIZE = 255;
msg = '';
read = BUFFER_SIZE;
while read >= BUFFER_SIZE
newmsg = char(recv(c, BUFFER_SIZE));
read = length(newmsg)
msg = [ msg newmsg];
end
endfunction
|