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