
DEVELOPMENT PLATFORMS

Primary development platform for socat is currently SuSE Linux 8.2 with
a 2.4.20 kernel. New features are then ported to the non-Linux platforms on the
Sourceforge compile farm (per July 2003: SunOS 5.8 with gcc, and MacOS X 10.2),
and AIX 5.1 with gcc. But due to limited time resources and restricted
(non-root) access to these systems I cannot extensively test socat there.


PORTING STEPS

If you want to port socat to another operating system you will typically go
through two phases: First, you might just try to compile and run the actual
socat distribution (passive phase). Then, you should see if your platform
has some nice features that are not yet used in socat, and add code for
supporting them (active phase). At last, I encourage you to send me your
changes so I can integrate them into the main socat distribution.


PASSIVE PHASE:

* Generate Makefile and config.h:
  . If you have gcc, then just invoke "./configure".
  . If you use another C compiler, configure might not work properly;
    You will have to adapt config.h and Makefile manually.
    Change compiler options or defines to use all features of the operating
    system (not only ANSI-C; e.g. HP-UX: -Ae!)
    Some practical config.<platform>.h examples have been included in the
    Config directory of the source that might serve as starting point.

* Try to "make" socat; correct the errors. If some constants are undefined,
  please disable these parts option-dependent, not platform-dependent (use
  #ifdef TCP_OPTION  instead of  #if MY_OS)

* If you have big troubles compiling socat then try configure with options 
  --disable-filan --disable-sycls; this excludes some of the most system 
  dependent parts.

* After successful compilation and linking, run "make test" and try some
  examples.


ACTIVE PHASE:

* Check the man pages of your operating system for open(2), fcntl(2),
  setsockopt(2), ioctl(2), socket(7), ip(7), tcp(7), termios etc. and the
  include files where you find the definitions of existing options, for new
  options and implement them - again option-dependent.
  Places to add code for the new options: 
  . xioopts.h: enum e_optcode  (sorted numerically/alphabetically by name)
  . xio-*.c: select the appropriate address file (e.g., xio-tcp.c for
    TCP-options) and make a record of type struct optdesc: opt_newoption
  . xio-*.h: the declation of struct optdesc
  . xioopts.c: add records to  struct optname optionnames  for all appropriate
    names (sorted strictly ASCII for binary search)
  . filan.c: add the option to the appropriate array (sockopts, ipopts,
    tcpopts) 
  . socat.html, socat.1, xio.help: write a short documentation and tell which
    platform and version implements this option

* problems may occur especially:
  . with 16 or 64 bit systems
  . if snprintf() etc. is missing
  . on UNIX emulations, e.g. Cygwin


INTEGRATION

* If you ported socat to another platform:
  To let other people participate please send the modified files or a patch
  file and the files generated by ./gatherinfo.sh to socat@dest-unreach.org.
