/===================================================================\ || || || Simple Sockets Library Differences Document || || Charles E. Campbell, Jr., PhD. || || || || HISTORY || || || \===================================================================/ Version 7c: *** RELEASED *** Aug 22, 2005 a. (Marcel Satchel) improved for Windows b. (Aug 22, 2005) included the "b" option for Sopen() (block until requested server becomes available) c. (Marcel Satchel) Sinit.c fixed (yet again!) Version 6: *** RELEASED *** Mar 24, 2005 a. (Jul 16, 2004) Neeme Tingas suggested that several int declarations be changed to socklen_t for Gnu CC. I'm currently using __gnu_linux__ to test for using socklen_t instead of int. He also suggested using one int for sigio_handler in EXAMPLES/sktsig.c. IMHO, the signal() interface seems to be one where lots of different systems use different calling standards and their compilers are quite vigilant about complaining about other styles. b. (Mar 24, 2005) Blocking client opens (Sopen(servername,"b")) has been implemented. Clients can now request a block until the requested server registers itself with the PortMaster. Version 5: *** RELEASED *** May 24, 2004 a. Now supports cygwin. Note that some of the EXAMPLES programs will not compile under cygwin because it doesn't support sigcontext (yet): oobsend and sktsig. Thanks go to Frank Myers for this port! Version 4: *** RELEASED *** Apr 22, 2004 a. (thank you, Martin Wood!) prototype and declaration for sprt() changed to char *sprt(const char *). b. (thank you, Martin Wood!) Changed __linux to __linux__ in to keep it consistent with c. (thank you, Martin Wood!) Changed inclusion of to for Linux Version 3: *** RELEASED *** Apr 02, 2004 a. Cosmetic changes, extra initialization of pointers to NULL, to skdbg.c and Spm.c b. Mac OS-X supported (#ifdef MACOS_X...) You may need to put in a into to get it to compile properly. Thanks to Paul Bourne for sharing this! Version 2.11a: *** RELEASED *** March 6, 2001 a. Steve Richards has ported the Simple Sockets Library to OS/2 and has given permission to distribute his changes. b. sktdbg's put command enhanced to understand \a is ctrl-a, \b is ctrl-b, ... \z is ctrl-z. Version 2.10: *** RELEASED *** Feb 28, 2001 a. Included Microsoft Developer Studio mods - thanks to David Dowd! b. Fixed Speername(), including peername and peeraddr commands in sktdbg c. Made ...->skt= NULL; be ...->skt= 0; because some compilers were complaining about making an integer from a pointer without a cast. d. talkclient.c had an uninitialized pointer that caused core dumps under Linux. Fixed! e. Servers named "$####" will attempt to use port #### (where # is a number from [0-9]). Note that ports 0-1023 are typically reserved. f. Moved "xtdio.h" to after the extern "C" in (thanks to Ralf Moeller) g. Steve Richards has kindly ported the Simple Sockets Library to the AS/400 and has given permission to distribute his changes. Version 2.09: a. Includes two new examples: and b. Sinit() refused to compile under Unix (its really for BillG's o/ses); now fixed. c. Spm now releases controlling terminal under Unix by itself (ie. nohup is no longer needed) (ie. uses setsid()). d. Spm now runs as a "task" under Windoze; ie. if Spm.exe is put into c:\Windows\Start Menu\Programs\StartUp it will run quietly (no window, no ctrl-c to close). e. Speername() and Speeraddr() passed the wrong length to the gethostbyaddr() and getpeername() functions; fixed! f. Sopen/Sclose will now accept NULL or "" for a sktname; in such a case, the user *must* specify the port number (ie. "s12345" or "c12345"). In such a case, the PortMaster is bypassed. Facilitates use with some firewalls. g. Dr Jon Christopher found a bug and provided a fix to Version 2.08: *** RELEASED *** March 30, 1998 1. Sopen_server now sets up sin.sin_port with htons() rather than htonl() 2. Sopen_server's gethostname call now checked for error (has never happened before, but you never know!) 3. Changes were made to and to support Linux. Thanks go to Gary Johnson (gjohnson@season.com). 4. ***BIG CHANGE***: Starting with v2.08, the Simple Socket Library's PortMaster is now registered with IANA. However, its former port was already assigned by IANA elsewhere, so the PortMaster now has a new port number, 1750. This means that your current SSL-using s/w needs to be recompiled as it won't be able to contact the new PortMaster with its new port number. Web users, check out http://www.iana.org/iana/ Ftp users, check out ftp://ftp.isi.edu/in-notes/iana/assignments/ 5. Modest changes made to the PortMaster's startup banner and stdio/stderr/stdout closing. 6. freeSocket() now also nulls out the Socket's contents. This function is implicitly called by using Sclose(). 7. Two new functions: Smaskisset(Socket *skt) and Smaskfdisset(int fd). These two functions are faster than using Smasktest() after a Smaskwait(). A supporting new command, "isset", is in sktdbg, and supporting changes were made to , the manual. 8. spmtable issues warnings instead of errors on PortMaster problems, thereby allowing it to continue through a list of portmasters. 9. PortMasters will now include the host of servers "sharing" another machine's PortMaster for PM_TABLE requests. Translated: spmtable will now show what machine a server is actually on if not the PortMaster's own host. 10. ERROR -> XTDIO_ERROR, etc -- too many folks are using ERROR, WARNING, etc, and so this fixes that problem. 11. Srmsrvr now uses PMSHARE if no hostname was specified; this improvement also affects the srmsrvr program. 12. Sopen_client now attempts hostname first; if no success and PM_SHARE is defined, try Sopen_client to PM_SHARE's PortMaster. Version 2.07: 1. Porting hint #5 was added to 2. The file was modified with a comment (concerning #define const) supporting porting hint #5 (see ). 3. To the signal() calls in and , I included (void *) casts to the second argument (the name of the function to be called in the event of receipt of a signal). 4. Modified Makefiles so that ${...} -> $(...), because some Suns had problems with expanding the ${...} form (wierd!). 5. Improved documentation for VMS -- included notes on how to use VMS's DCL to allow for command line arguments. 6. now #includes , which provides prototyping. 7. New functions: Speername() returns a string giving the peer's name Speeraddr() returns the internet address of the peer 8. PortMaster now uses SO_REUSEADDR -- it doesn't seem necessary, as the PortMaster is very stable in operation, but I decided to do so for Murphy's Law handling. Any comments on this choice one way or the other are welcome! 9. Sopen has been extended - it now will handle user-specified ports in addition to dynamic port binding, for both servers and clients. Check out Sopen()'s "mode" in the manual. --------------------------------------------------------------------- Version 2.06: 1. spmtable improved so that it will not hang on non-responding PortMaster (and will give messages). 2. Sopen_clientport had unnecessary copying removed: hostenstruct= *hostentptr; --------------------------------------------------------------------- Version 2.05: 1. Sopen/SSLNEEDTOSHAREPM problem fixed: PCs should now be able to share other's PortMasters to instantiate servers. 2. Fixed documentation on the PortMaster; its been using port 1541 for quite awhile now (it was changed from 1540 due to a problem with Suns in Version 2.01). 3. Added shutdown() before close() to Sclose, Sopen (error handling), and Spm. --------------------------------------------------------------------- Version 2.04: 1. spmchk.c now returns (0 usually, 1 for vms) or 2 -- facilitated vms usage 2. If Sopenv's env_var is NULL or a null string (ie. ""), it will use SKTPATH for its socket path environment variable. --------------------------------------------------------------------- Version 2.03: 1. sockets.h and Sopen now use the SSLNOSETSOCKOPT to specify which tcp/ip implementations do not support the setsockopt() call (currently, that's msdos and aix). 2. OSF support tentatively added 3. smsrvr.c and smclient.c examples added to the distribution --------------------------------------------------------------------- Version 2.02: 1. The sockets.tex had Smaskwait calling syntax wrong: wrong : Smaskwait(Socket *) - instead of - correct : Smaskwait() The sockets.tex file has been corrected. 2. The sockets.h file was improved so that Suns which have Standard C compilers will use instead of . 3. Marty Olevitch donated spmchk.c (he placed it into the public domain) and is included and documented in this distribution. 4. Included out-of-band data handling example (both send and receive programs). 5. Sread, Sreadbytes, Swrite, and Speek: now take void *buf instead of char * buf. This change should not affect any prior uses but allows SSL programmers to use fewer casts when dealing with these functions. 6. Smasktest used to change the Smasktime information (to 0sec 0usec). Smasktest now saves the current time data, does its thing, and then restores the timeout info. 7. Added cprt() to the library; its like sprt(), but for single characters. 8. Used cprt() with the read command in sktdbg to make all characters read visible (and not depend on a null byte which may not be there). 9. Thanks to R. Day, SCO and Solaris Unix support has been added (options to and ). 10. The RDCOLOR environment variable is now used (instead of COLOR) to indicate what directory the file resides in. The documentation in has been changed to reflect this. --------------------------------------------------------------------- Version 2.01: 1. Stimeoutwait : now takes three arguments: int Stimeoutwait(Socket *skt,long seconds,long useconds) instead of two (useconds was added in). This change impacted: Sclose Sopen Srmsrvr Stimeoutwait Portmaster (Spm) sktdbg 2. Sgets : bug in high data transfer rate fixed. I've now transferred literally thousands of images (from a capacitance-based "camera") with no problems. 3. PortMaster (Spm): firewall (security) support More resistance to crashing, two ways: first, more Stest()s, and second, the Stest function itself (see #9) has improved. 4. Document: more examples, firewall discussion, and blather 5. Sopen: opens with TCP_NODELAY for the machines which support it -- this setting helps small packets get across the Net faster at the price of net efficiency (default behavior: tcp/ip bundles small packets together within some time interval). 6. AIX (IBM's risc machine) is now supported via 7. sktdbg: a) has an enhanced prompt: ( 0 bytes) Enter: It now tells you how many bytes were awaiting processing when the prompt was issued (ie. it uses Stest()). b) fwinit command: tells the PortMaster to re-initialize its firewall list. Good for whoever owns the firewall list to update it and then to tell the PortMaster to re-read it. c) a "close" bug was stomped on 8. Smaskwait : I'm not sure about the old release (Version 1.0) , so some of these functions may be new: Smaskfdset Smaskunfdset Smaskpush Smaskpop 9. Stest Speek: used to have problems with a killed socket. These functions now detect dead sockets (ie. return a -1). 10. The Sun Sparcstation operating system seems to use port 1540 for its own purposes, so the PortMaster's port was changed to be 1541 instead of 1540. The new port assignment works on all the other machines in the test group (SGI Personal Iris, SGI Extreme, Sun 3, Sun Sparcstation, IBM/AIX, DecStation/Ultrix, IBM-PC/MSDOS, DEC/VMS). --------------------------------------------------------------------- Version 1.0: This was the original (and lacked a version number, sigh...) ---------------------------------------------------------------------