| 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: 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. |