COMPILING AND SETTING UP UNIX NETWORK PROGRAMMING (UNP) LIBRARY
To develop
their automated traders in an external machine, you need to install the UNP
communication library provided by Richard Stevens' Unix Network Programming
book. The source code can be found at:
http://www.kohala.com/start/unpv12e/unpv12e.tar.gz
We assume you saved the file in a directory that we refer to as UNPV_DIR. After that, the user can use the command (to unzip and untar in the current directory):
tar -xvzf unpv12e.tar.gz
That should create a directory unpv12e
in UNPV_DIR, and uncompress all the necessary files inside
it.
The next step is to compile the network library without errors. Here
is Stevens' original compilation notes together with other comments added
to ease up the compilation process.
QUICK AND DIRTY (Originally by Richard Stevens, edited by PLAT Team)
Once you are inside UNPV_DIR,
cd unpv12e
./configure # try to figure out all
implementation differences
cd lib # build the basic
library that all programs need
make # use "gmake" everywhere
on BSD/OS systems
If you are unable to compile using '
make' (the last step above), then follow the
modifications suggested below and try again. The exact nature of the
modifications needed might differ from one configuration to another.
Below are general tips from our crux installation. After you change
something in the UNP source code, we recommend you execute '
make clean' before calling 'make' again to be certain that your changes are fully incorporated.
NOTES ON UNP INSTALLATION ON CRUX
The following are the particular changes we needed to make for the UNP
installation on crux (UNPV_DIR=/usr/local):
Commented out a structure because it was a redefinition of
a structure which was in the system's include libraries, with one extra
field: (UNPV_DIR/unpv12e/lib/unp.h, line 113)
/* Commented out the following because it is a redefinition of a structure
* with slightly different/missing fields defined in system's original
* header files.
*/
//struct in_pktinfo {
//struct in_addr ipi_addr; /* dst IPv4 address */
//int ipi_ifindex; /* received interface index */
//};
Replaced the call to mktemp with call to mkstemp instead, since the latter is obsolete, and modified the function MKtemp accordingly (for example, mktemp returns NULL on error, but mkstemp returns -1 on error): (UNPV_DIR/unpv12e/lib/wrapunix.c, line 96)
/* Changed the call to mktemp with call to mkstemp */
if (mkstemp(template) == -1 || template[0] == 0)
err_quit("mkstemp error");
That's all we needed to change for this part of the UNP installation
process, and then the compilation worked without errors (for the most part,
you can safely ignore any warnings you see during the UNP library compilation).
In general, one additional possible change you might need to make is to edit the file config.cache in the UNPV_DIR/unpv12e
directory. If you get an error, either during this step of building the
UNP library or the compilation of your strategies, regarding the
function getnameinfo, you want to make sure that the following line regarding getnameinfo in config.cache is exactly as follows:
ac_cv_func_getnameinfo=${ac_cv_func_getnameinfo=yes}
(i.e., make sure it is set to "yes" as above!). If you have to make
this change, you should re-execute the following sequence of commands
starting at the UNPV_DIR/unpv12e directory,
./configure
cd lib
make clean
make
Before finishing off with the UNP installation, you also need to execute the following:
cd UNPV_DIR/unpv12e/libfree
# continue building the basic library
make
If all that works (without errors!), you're done with the compilation of the network layer. If
you wish, you can now safely remove the compressed file UNP package
file you downloaded (or the tar file that resulted if you directly
uncompressed the file) after successfully building the UNP library.