RXSOCK was originally written by an IBM employee named Patrick Mueller for IBM's OS/2 operating system. It was made available to OS/2 users as Employee Written Software. IBM also included a WIN32 version of that RXSOCK with its Object Rexx for Windows.

Later, Darren Abbott created his own Windows (ie, WIN32) version of RXSOCK, which he tried to make as compatible with the IBM OS/2 version as possible. The current version of RXSOCK available upon this web site is based upon Darren's 1.2 version.

Nevertheless, there were some differences between the original IBM version and Darren's version as so:


Connected-operations on non-connected sockets return errors with Darren's RXSOCK. Under the IBM version, they do not -- you must detect errors using other methods.

Under the IBM version, SockGetSockOpt() returns success (ie, 0) for an invalid 'optVar'. Under Darren's RXSOCK, an error code of -1 is returned for an invalid option.

Under the IBM version, SockSetSockOpt() returns success when trying to set an invalid 'optVar'. Under Darren's RXSOCK, an error code of -1 is returned.

Under the IBM version, SockSetSockOpt() returns success when setting a numeric option to some non-numeric value. By default, it will set the option to a value of 0 in this case. Under Darren's RXSOCK, the option's value is not changed, and an error code of -1 is returned.

Certain socket options that exist under the IBM version do not appear to exist under other operating systems. For example, Windows RXSOCK does not support SO_RCVLOWAT, SO_RCVTIMEO, SO_SNDLOWAT, SO_SNDTIMEO, and SO_USELOOPBACK. Trying to set or get those options under Darren's version of RXSOCK returns an error code of -1.

The IBM version sometimes returns different error codes for a given error than other operating systems do. For example, Windows will return ECONNRESET in some instances where OS/2 will return EPIPE. In other instances, both will return ECONNRESET, so no simple translation table is possible. SockSock_Errno(), SockPSock_Errno(), and SockErrMsg() work with the error codes returned by the host environment. For most errors, the codes are identical.

SockPSock_Errno() messages almost certainly differ from the IBM version for some error codes.

The IBM version did not have the function RxsockVersion(), which was added to Darren's version.


Mark Hessling made some minor modifications to Darren's RXSOCK source code, mostly to make it portable to UNIX platforms (ie, so that versions could be produced for other operating systems besides Windows). Functionally, nothing was changed.


Jeff Glatt made some further modifications to the source code, resulting in a few more changes and additions between Darren's version of RXSOCK, and the version available upon this web site as modified by Jeff Glatt.

Neither the IBM version nor Darren's version have the function SockErrMsg(), which was added to Jeff's version in order to better create portable REXX scripts, and simplify the accurate reporting of errors.

In Jeff's version of RXSOCK, the values that the REXX variable ERRNO can take on have been extended to include errors that the REXX Interpreter or operating system may return. Also, ERRNO is more consistently set. (ie, It is always set to 0 upon the successful completion of an RXSOCK function, or an appropriate error name if an error occurs -- even if the SYNTAX condition is raised). Darren's version did not set ERRNO at all. The IBM version was inconsistent in setting ERRNO, and didn't identify errors that may occur with the REXX interpreter. (Therefore, REXX scripts using RXSOCK could either miss important errors, or incorrectly report errors).

Additional error checking was added to Jeff's version to fix missing error handling in the original sources. Also, proper cleanup was added to the Windows version of Jeff's RXSOCK.

Jeff's RXSOCK supports the Reginald REXX interpreter and its auto-load feature.

Jeff's version still supports all of the Windows interpreters that Darren's version supports (in addition to Reginald), but no longer requires Mark Hessling's REXXTRANS.

Under Jeff's version, SockSelect() returns an error of -1 if a non-numeric value is passed in for the 'timeoutsecs' amount.

Under Jeff's version, SockGetHostByName() sets ERRNO to a symbolic error name if the call to the sockets library fails. The IBM version sets ERRNO to 0 (ie, success) even if the call fails. Darren's version never fixed this.