Files
harbour-core/harbour/doc/en/hbinet.txt
Viktor Szakats 45a114e471 2010-06-03 18:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* tests/testsha1.prg
  * tests/longdev.prg
  * tests/clsccast.prg
  * tests/cmphello.prg
  * tests/clsicast.prg
  * tests/testop.prg
  * tests/clsscast.prg
  * tests/objarr.prg
  * tests/rddtest/rddmktst.prg
  * tests/rddtest/adscl52.prg
  * tests/rddtest/adscl53.prg
  * tests/rddtest/ntxcl52.prg
  * tests/rddtest/ntxcl53.prg
  * tests/rddtest/cdxcl52.prg
  * tests/rddtest/rddtst.prg
  * tests/rddtest/cdxcl53.prg
  * tests/transtst.prg
  * tests/output.prg
  * tests/ac_test2.prg
  * tests/clsscope.prg
  * tests/dosshell.prg
  * tests/sbartest.prg
  * tests/speedold.prg
  * tests/sdf_test.prg
  * tests/wcecon.prg
  * tests/debugtst.prg
  * tests/testdyn.c
  * tests/multiarg.prg
  * tests/fornext.prg
  * tests/hbinline.prg
  * tests/foreach2.prg
  * tests/objasign.prg
  * tests/scroll.prg
  * tests/inherit.prg
  * tests/rto_get.prg
  * tests/boxtst2.prg
  * tests/inkeytst.prg
  * tests/overload.prg
  * tests/cpinfo.prg
  * tests/gtwin.prg
  * tests/mt/mttest08.prg
  * tests/mt/mttest09.prg
  * tests/mt/mttest01.prg
  * tests/mt/mttest10.prg
  * tests/mt/mttest02.prg
  * tests/mt/mttest11.prg
  * tests/mt/mttest03.prg
  * tests/mt/mttest12.prg
  * tests/mt/mttest04.prg
  * tests/mt/mttest05.prg
  * tests/mt/mttest06.prg
  * tests/mt/mttest07.prg
  * tests/speedtst.prg
  * tests/testsha2.prg
  * tests/hsxtest.prg
  * tests/arrayidx.prg
  * tests/clsnv.prg
  * tests/rto_tb.prg
  * tests/gtchars.prg
  * tests/disptest.prg
  * tests/funcarr.prg
  * tests/testhtml.prg
  * tests/readhrb.prg
  * tests/tstcolor.prg
  * tests/gtxfnt.prg
  * tests/devtest.prg
  * tests/aliaslck.prg
  * tests/stripem.prg
  * tests/dynobj.prg
  * tests/tb1.prg
  * tests/round.prg
  * tests/longstr.prg
  * tests/testdyn.prg
  * tests/testdyn1.prg
  * tests/delimtst.prg
  * tests/tstdspac.prg
  * tests/version.prg
  * tests/setkeys.prg
  * tests/gtcolors.prg
  * tests/destruct.prg
  * tests/seconds.prg
  * tests/gtkeys.prg
  * tests/usrrdd/exarr.prg
  * doc/en/diskspac.txt
  * doc/en/string.txt
  * doc/en/rdd.txt
  * doc/en/hashes.txt
  * doc/en/hb_apigt.txt
  * doc/en/rddord.txt
  * doc/en/hb_api.txt
  * doc/en/hb_date.txt
  * doc/en/math.txt
  * doc/en/hb_vm.txt
  * doc/en/treport.txt
  * doc/en/terminal.txt
  * doc/en/hb_apiln.txt
  * doc/en/dir.txt
  * doc/en/command.txt
  * doc/en/rddmisc.txt
  * doc/en/errsys.txt
  * doc/en/nation.txt
  * doc/en/var.txt
  * doc/en/dbstrux.txt
  * doc/en/datetime.txt
  * doc/en/memo.txt
  * doc/en/tgetlist.txt
  * doc/en/tlabel.txt
  * doc/en/1stread.txt
  * doc/en/hb_set.txt
  * doc/en/hb_compa.txt
  * doc/en/hb_apier.txt
  * doc/en/hbinet.txt
  * doc/en/hb_macro.txt
  * doc/en/array.txt
  * doc/en/hb_apiit.txt
  * doc/en/rdddb.txt
  * doc/en/dbsdf.txt
  * doc/en/hvm.txt
  * doc/en/input.txt
  * doc/en/dbdelim.txt
  * doc/en/browse.txt
  * doc/en/menu.txt
  * doc/en/hb_apird.txt
  * doc/en/hb_apifs.txt
  * doc/en/file.txt
  * doc/en/lang.txt
  * doc/en/objfunc.txt
  * doc/en/eval.txt
  * doc/en/binnum.txt
  * doc/en/tclass.txt
  * doc/en/misc.txt
  * doc/en/set.txt
  * doc/en/readme.txt
  * doc/man/harbour.1
  * doc/man/hbmk2.1
  * doc/man/hbpp.1
  * doc/man/hbtest.1
  * doc/man/hbrun.1
  * examples/hbextern/hbextern.prg
  * examples/pp/pp.c
  * examples/pp/hbpragma.c
  * examples/pp/hbppcore.c
  * examples/pp/hbppcomp.c
  * examples/pp/hbpptbl.c
  * examples/pp/hbppdef.h
  * examples/superlib/hbsuper.prg
  * examples/hbsqlit2/hbsqlit2.ch
  * examples/misc/mankala.prg
  * examples/misc/guess.prg
  * examples/rddado/adordd.prg
  * examples/rddado/adordd.ch
  * examples/hbapollo/apollo.ch
  * examples/hbapollo/apollo.c
  * examples/hbapollo/apollo1.prg
  * examples/hbdoc2/gentpl.prg
  * examples/hbdoc2/gentxt.prg
  * examples/hbdoc2/tmplates.prg
  * examples/hbdoc2/genxml.prg
  * examples/hbdoc2/genhtml.prg
  * examples/hbdoc2/hbdoc2.prg
  * examples/hbdoc2/hbdoc2.ch
  * examples/guestbk/guestbk.prg
  * examples/httpsrv/uhttpd.ini
  * examples/httpsrv/uhttpd.prg
  * examples/httpsrv/cookie.prg
  * examples/httpsrv/cgifunc.prg
  * examples/httpsrv/session.prg
  * examples/terminal/trm_cli.prg
  * examples/terminal/terminal.prg
  * examples/terminal/trm_srv.prg
  * examples/terminal/trm_app.prg
  * examples/hbbtree/hb_btree.h
  * examples/hbbtree/hb_btree.ch
  * examples/hbbtree/hb_btree.c
  * examples/hbbtree/tbtree.prg
  * examples/hscript/hscript.prg
  * examples/hscript/dir.hs
  * examples/hscript/multiply.hs
  * examples/hscript/ugly.hs
  * examples/hscript/hello.hs
  * examples/gtwvw/hbole.h
  * examples/gtwvw/wvwdraw.c
  * examples/gtwvw/wvwmenu.c
  * examples/gtwvw/gtwvw.c
  * examples/gtwvw/wvwstbar.c
  * examples/gtwvw/wvwcheck.c
  * examples/gtwvw/wvwfuncs.c
  * examples/gtwvw/wvwpush.c
  * examples/gtwvw/wvwedit.c
  * examples/gtwvw/wvwtbar.c
  * examples/gtwvw/hbgtwvw.h
    * Deleted 'www.' from harbour-project.org website name.
      (www.harbour-project.org -> harbour-project.org)
2010-06-03 16:23:36 +00:00

1865 lines
40 KiB
Plaintext

/*
* $Id$
*/
/*
* The following parts are Copyright of the individual authors.
* www - http://harbour-project.org
*
* Copyright (date unknown) Giancarlo Niccolai <gian@niccolai.ws>
* Documentation for: Harbour INET API
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETINIT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Activate Harbour INET support
* $SYNTAX$
* HB_INETINIT() -> lResult
* $ARGUMENTS$
* (This function has no arguments)
* $RETURNS$
* Returns .T. or .F. whether the internal INET system was successfully initialized
* $DESCRIPTION$
* Activates inet support; mainly used for winsock start up at the moment, but
* could be used in the future for many other purpose. Put it at the beginning
* of every program using INET functions.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* HB_INETCLEANUP
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Terminate Harbour INET support
* $SYNTAX$
* HB_INETCLEANUP()
* $ARGUMENTS$
* (This function has no arguments)
* $DESCRIPTION$
* Closes inet support; mainly used for Windows. Put it at the end of any program
* using Inet functions, just before the program exits.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCREATE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Create an INET socket
* $SYNTAX$
* HB_INETCREATE( [ <nTimeout> ] ) -> SOCKET
* $ARGUMENTS$
* <nTimeout> Socket timeout (optional) TODO: what is the scale (seconds, milliseconds?)
* $RETURNS$
* An INET socket
* $DESCRIPTION$
* Creates the raw data of the socket, that can be passed to a asynchronous
* connection function (hb_InetConnect or hb_InetConnectIP). This will prevent the
* connection function from allocating some data that could be never used in
* certain cases, i.e. an asynchronously detected timeout.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCLOSE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Close an INET socket
* $SYNTAX$
* HB_INETCLOSE( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Returns 0 on success or -1 on error; on error, the error code is set;
* (actually, on success the socket error code is set to 1 -- socket closed )
* $DESCRIPTION$
* Closes the socket, notifiying both ends of the communication pipe that the
* connection is over.
*
* If you have threads waiting for data to be read from
* this socket, this method will make them stop waiting and return an error
* (socket closed) to their callers.
*
* The method does not destroy the socket, which can be used by subordinate
* threads to check that the socket is closed, and so they should stop as soon
* as they can. Don't destroy the socket unless you are sure that no other
* thread is using it.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETFD
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* ?
* $SYNTAX$
* HB_INETFD( <socket> [, <lNoSocket> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <lNoSocket>
* $RETURNS$
* ?
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSTATUS
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the status of a socket
* $SYNTAX$
* HB_INETSTATUS( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Returns 1 (one) if the socket exists, -1 if it does not
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $no-DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSTATUSDESC
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* ? (note: this function is not active in hbinet.c)
* $SYNTAX$
* HB_INETSTATUSDESC( )
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
*
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETERRORCODE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the last INET error code
* $SYNTAX$
* HB_INETERRORCODE( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Last error code
* $DESCRIPTION$
* Returns the last error code that has been provoked by a network operation,
* or 0 if none.
*
* Error codes are the ones used for winsock or UnixSockets (they
* are the same); 1 is reserved for "connection closed" message.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETERRORDESC
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the last INET error code description
* $SYNTAX$
* HB_INETERRORDESC( <socket> ) -> cResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* System-dependant error string
* $DESCRIPTION$
* Returns a string describing the last error that occurred in the socket;
* the string is system dependent, and should be used only for debugging
* purposes.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* HB_INETCLEARERROR
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Clear the socket error value
* $SYNTAX$
* HB_INETCLEARERROR( <socket> )
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCOUNT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the number of bytes last read or sent
* $SYNTAX$
* HB_INETCOUNT( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Last socket operation character count
* $DESCRIPTION$
* Returns the amount of characters read or written in the latest socket
* operation.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETADDRESS
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get a remote server address
* $SYNTAX$
* HB_INETADDRESS( <socket> ) -> cResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Server address
* $DESCRIPTION$
* Returns a string representing the remote server address in quad dot notation,
* e.g. "192.168.1.1", or the local server address if the socket is server
* side.
*
* TODO: have a version that returns a vector of 4 numbers.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETPORT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the port a socket is bound to.
* $SYNTAX$
* HB_INETPORT( <socket> ) -> cResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Port name the socket is bound to.
* $DESCRIPTION$
* Returns the port to which this socket is bound, or the remote port if this
* socket is connected with a remote host or client
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETTIMEOUT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get or change the timeout value of a socket
* $SYNTAX$
* HB_INETTIMEOUT( <socket> [, <nTimeout> ] ) -> nPreviousTimeout
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <nTimeout> is the new socket timeout value
* $RETURNS$
* Returns the previous timeout value of the socket
* $DESCRIPTION$
* Sets or changes the timeout value of the socket.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* HB_INETCLEARTIMEOUT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Clear the timeout value of a socket
* $SYNTAX$
* HB_INETCLEARTIMEOUT( <socket> )
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $DESCRIPTION$
* Clears the default timeout of the given socket. Default timeout is used in all
* blocking operations.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETTIMELIMIT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get or change the time limit value of a socket
* $SYNTAX$
* HB_INETTIMELIMIT( <socket> [, <nTimeLimit> ) -> NIL
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <nTimeLimit>
* $RETURNS$
* Returns the previous time limit value of the socket
* $DESCRIPTION$
* Sets or changes the time limit value of the socket.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* HB_INETCLEARTIMELIMIT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Clear the time limit value of a socket
* $SYNTAX$
* HB_INETCLEARTIMELIMIT( <socket> )
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $DESCRIPTION$
* Clears the default time limit of the given socket.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETPERIODCALLBACK
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get or change the periodic callback value of a socket
* $SYNTAX$
* HB_INETPERIODCALLBACK( <socket> [, <xCallback> ] ) -> xPreviousCallback
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* xCallback a new periodic callback
* $RETURNS$
* The previous periodic callback value
* $DESCRIPTION$
* Sets or returns the socket periodic callback value
*
* xCallback can be one of: a codeblock, an array of (...), or a (symbol)
* TODO: describe these better
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* HB_INETCLEARPERIODCALLBACK
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Clear the periodic callback value of a socket
* $SYNTAX$
* HB_INETCLEARPERIODCALLBACK( <socket> )
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETGETSNDBUFSIZE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the socket send buffer size
* $SYNTAX$
* HB_INETGETSNDBUFSIZE( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Returns the socket send buffer size or -1 if the socket is closed or an error occurs
* $DESCRIPTION$
* Returns the socket send buffer size or -1 if the socket is closed or an error occurs
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETGETRCVBUFSIZE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get the socket receive buffer size
* $SYNTAX$
* HB_INETGETRCVBUFSIZE( <socket> ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Returns the socket receive buffer size or -1 if the socket is closed or an error occurs
* $DESCRIPTION$
* Returns the socket receive buffer size or -1 if the socket is closed or an error occurs
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSETSNDBUFSIZE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Set the send buffer size of a socket
* $SYNTAX$
* HB_INETSETSNDBUFSIZE( <socket>, <nSize> ) -> nSize
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* nSize
* $RETURNS$
* Returns the passed nSize or -1 on error
* $DESCRIPTION$
* Sets the send buffer size of a socket
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSETRCVBUFSIZE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Set the receive buffer size of a socket
* $SYNTAX$
* HB_INETSETRCVBUFSIZE( <socket>, nSize ) -> nSize
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* nSize
* $RETURNS$
* Returns the passed nSize or -1 on error
* $DESCRIPTION$
* Sets the receive buffer size of a socket
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETRECV
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Read from a socket
* $SYNTAX$
* HB_INETRECV( <socket>, @<cResult>, [ <nAmount> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cResult> is the target buffer and must be passed by reference
*
* <nAmount> is the upper limit of characters to be read from the socket.
* If not passed this defaults to the length of cResult
* $RETURNS$
* The number of the characters read from the socket.
* $DESCRIPTION$
* Reads from the socket into a buffer.
*
* The parameter cString must be preallocated so that it has enough
* space to receive the data. The routine will block the thread until some
* bytes are read from the socket, the socket is closed (either from the
* receiver or the sender side) or a network error occurs, whichever comes
* first. In the latter cases, an error is set, and only the characters
* received until premature end of communications are returned.
*
* Notice that there is no guarantee that all the available bytes will be
* read before the function returns, in fact, hb_InetRecv returns as soon it
* is able to fill cString with one or more bytes. To block the current
* process until the whole cString is filled (or nAmount bytes are read),
* use the hb_InetRecvALL().
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETRECVALL
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Read from a socket without blocking
* $SYNTAX$
* HB_INETRECVALL( <socket>, @<cResult>, [ <nAmount> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cResult> is the target buffer and must be passed by reference
*
* <nAmount> is the upper limit of characters to be read from the socket.
* If not passed this defaults to the length of cResult
* $RETURNS$
* The number of the characters read from the socket. Might be
* less than nAmount on premature socket closing or on network error.
* $DESCRIPTION$
* This function works exactly as hb_InetRecv except that it
* blocks until nAmount bytes are read, if nAmount is given, or
* cString is filled for its whole length.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETRECVLINE
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Read a line from a socket
* $SYNTAX$
* HB_INETRECVLINE( <socket> [, @<nBytesRead>, [, <nMaxLength> [, <nBufSize> ]]] ) -> cResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <nBytesRead> must be passed by reference
*
* <nMaxLength>
*
* <nBufSize>
* $RETURNS$
* Line read
* $DESCRIPTION$
* Blocks the calling thread until a sequence CRLF is read from the socket.
* Incremental allocation and end-of-line checking are done in an efficient
* way.
*
* If an error occurs, or if the stream is closed before a CRLF is read,
* the function returns nothing and sets the socket error.
*
* The returned string does not contain the trailing CRLF sequence, so an
* empty line is effectively returned as an empty string.
*
* If the nBytesRead parameter is given, it will contain the number of bytes
* read from the socket, including the CRLF sequence, so that in normal
* conditions, nResult will report a count equal to the length of the
* returned string plus 2. nBytesRead will be 0 if stream is closed before
* a CRLF sequence is read, and will be -1 on error.
*
* An optional nMaxLength parameter can be given to allow a maximum character
* count before the data is returned anyway. If this number is reached before
* a CRLF sequence is encountered, nBytesRead will contain the value one.
*
* Finally, a nBufSize parameter can be given. If not, memory allocation
* will be increased by discrete amounts of 80 bytes. The programmer
* can provide here a different allocation strategy (e.g. setting nBufSize
* equal to nMaxLength, memory for reading the line will be allocated only
* once, at the beginning of the function).
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETRECVENDBLOCK
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Read a block from a socket
* $SYNTAX$
* HB_INETRECVENDBLOCK( <socket> [, <cBlock >[, @<nBytesRead> [, <nMaxLength> [, <nBufSize> ]]]] ) -> cResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cBlock>
*
* <nBytesRead>
*
* <nMaxLength>
*
* <nBufSize>
* $RETURNS$
* Block read
* $DESCRIPTION$
* This function operates exactly the same way as hb_InetRecvLine, but
* the "record termination" is customizable through the cBlock parameter.
* If not given, this parameter defaults to the CRLF sequence.
* Provided by: Marcelo Lombardo
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETDATAREADY
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get whether there is data ready in a socket
* $SYNTAX$
* HB_INETDATAREADY( <socket>, [ <nMillisec> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <nMillisec>
* $RETURNS$
* If there is data available 1 (one) is returned, 0 (zero) if there is no data
* and -1 if there is an error.
* $DESCRIPTION$
* Verifies if some data is available to be read in the socket without blocking
* execution of the caller.
*
* If nMillisecs is not given, the function returns
* immediately 1 if there is some data to be read, 0 if there isn't any data and
* -1 in case of error.
*
* If nMillisecs is given, the functon will wait up to that
* amount of milliseconds for data to be available; if some data arrives in the
* meanwhile, the wait is immediately interrupted.
*
* The next hb_InetRecv() function will read all the available data (up to the
* required length) without blocking.
*
* On error, hb_InetErrorCode and hb_InetErrorDesc can be use to determine what kind
* of error happened.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSEND
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Sent data through a socket
* $SYNTAX$
* HB_INETSEND( <socket>, <cBuffer> [, <nLength> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cBuffer>
*
* <nLength>
* $RETURNS$
* The amount of data written, 0 (zero) if the socket is closed, or -1 on an error
* $DESCRIPTION$
* Send data being stored in a string over the socket.
*
* The nLength parameter can be given to allow writing only a part of
* the string.
*
* There is no guarantee that all of cBuffer will be
* sent, as this is a decision that is up to the OS; this function does not
* take care to ensure that the data is really sent; check
* the returned number and send the part that has not been sent.
*
* To ensure that all the data is sent before the function returns, use the
* hb_InetSendAll() function.
*
* On error, the error in the socket is set.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSENDALL
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Send data through a socket with blocking
* $SYNTAX$
* HB_INETSENDALL( <socket>, <cBuffer> [, <nLength> ] ) -> nResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cBuffer>
*
* <nLength>
* $RETURNS$
* The amount of data written, 0 (zero) if the socket is closed, or -1 on an error
* $DESCRIPTION$
* This function works exactly as hb_InetSend() but it ensures that all the
* data to be sent is written before returning.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETGETHOSTS
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get an array of IP addresses of a host
* $SYNTAX$
* HB_INETGETHOSTS( <cName> ) -> aHosts
* $ARGUMENTS$
* <cName>
* $RETURNS$
* An array of IP addresses
* $DESCRIPTION$
* Returns an array containing all the IP addresses associated with a given
* host name. The IP addressess returned by this funtion are strings in
* quad dot notations, eg "192.168.1.1", and can be directly used into
* hb_InetConnectIP().
*
* cName can be any string: valid DNS names (eg.
* "www.myserver.com"), locally available names (e.g. "localhost" or
* windows Network Neighborhood names), or even IP addresses in quad
* dot notation.
*
* NOTE: This function is not thread safe (by design), and programmers
* must be sure not to use it at the same time in two different threads,
* or not to use it together with a hb_InetConnect(). If this kind of situation
* should ever arise, you are advised to use a thread MUTEX.
*
* On error, and if the server can't be found, the function returns NIL.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETGETALIAS
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get an array of aliases of a server
* $SYNTAX$
* HB_INETGETALIAS( <cName> ) -> aHosts
* $ARGUMENTS$
* <cName>
* $RETURNS$
* Array of server aliases
* $DESCRIPTION$
* Returns an array containing the aliases ( CNAME DNS records ) by
* which the server is currently known.
*
* Whether this function is able
* to have the complete list of aliases or not depends on the verbosity
* of the DNS server.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETSERVER
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Create a socket bound to a port
* $SYNTAX$
* HB_INETSERVER( <port> [, <cBindAddr> [, <nListenLimit> ]] ) -> SOCKET
* $ARGUMENTS$
* <port>
*
* <cBindAddr>
*
* <nListenLimit> is an internal parameter and rarely needs to be passed, defaults to 10
* $RETURNS$
* An INET socket
* $DESCRIPTION$
* Creates a server that can accept connections from client on a certain port.
*
* If the computer on which hb_InetServer is called has more than one logical
* interface (e.g. one network card, one loopback and one PPP address),
* cBindAddr can be specified to select only one of these interfaces to accept
* connections for this process. This is useful when a server is present on
* two networks, and the service is to be available only in one of them. Also,
* the same port on other addresses is left free to be used, so you can have
* different server programs running for different networks but managing
* the same service. For example, an FTP server available to the internal
* network could be radically different from an FTP server available for
* the internet.
*
* nListenLimit is the number of incoming connections accepted by kernel before the
* kernel has the chance to report them to the application program. If
* the sockets receive nListenLimit connections before accepting them
* all, the nListenLimit + 1 connection will be notified to be "busy" by
* the kernel. The default value of 10 is enough for even
* a heavy duty server.
*
* On error, sets error description in the newly returned socket.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETACCEPT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Wait until a socket is ready
* $SYNTAX$
* HB_INETACCEPT( <socket> ) -> SOCKET
* $ARGUMENTS$
* An INET socket
* $RETURNS$
* <socket> a socket previously created / opened
* $DESCRIPTION$
* Waits until a connection is available on a socket created with hb_InetServer,
* returns a socket that can be used to communicate with the incoming client.
*
* On error, NIL is returned and error code sets in the passed SOCKET.
*
* This error can be accessed using hb_InetErrorCode() function.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCONNECT
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Connect a socket to a remote server by IP address or name
* $SYNTAX$
* HB_INETCONNECT( <cAddress>, <nPort> ) -> SOCKET
*
* HB_INETCONNECT( <cAddress>, <nPort>, <socket> ) -> NIL
* $ARGUMENTS$
* <cAddress>
*
* <nPort>
*
* <socket>
* $RETURNS$
* (First form) INET socket
*
* (Second form has no return value)
* $DESCRIPTION$
* Connects to a remote server described by cAddress, that can be in
* quad dot notation (e.g. "192.168.1.1") or in DNS name (e.g.
* "www.xharbour.org"), using the desired port.
*
* hb_InetConnect uses "gethostbyname" C system call to
* find the network address of the specified server; this means that
* this call is an hybrid function doing both a DNS scan and a TCP/IP
* connection. hb_InetConnect is not thread safe, and the
* program must take care that two hb_InetConnect functions are never
* called at the same moment from two different threads (or that
* hb_InetGetHosts is not called in the same moment as an hb_InetConnect).
*
* The second version of this function accepts a pre-built socket
* as a parameter. This allows to kill asyncronously a thread waiting
* for hb_InetConnect to connect, and then cleaning up the leftover
* socket data. Also, it is possible to give timeout to the given SOCKET,
* but this timeout will be used only in the connection phase, after that
* the network address resolution is completed. Use GetHosts() and
* hb_InetConnectIP for a finer timeout control.
* On error, the error of the returned socket is set. The error could
* be due to unavailable name resolving service, host name not valid,
* host address not reachable and host reachable but port not open.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCONNECTIP
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Connect to a remote server by IP address
* $SYNTAX$
* HB_INETCONNECTIP( <cAddress>, <nPort> ) -> SOCKET
*
* HB_INETCONNECTIP( <cAddress>, <nPort>, <socket> ) -> NIL
* $ARGUMENTS$
* <cAddress>
*
* <nPort>
*
* <socket>
* $RETURNS$
* (First form) INET socket
*
* (Second form has no return value)
* $DESCRIPTION$
* Connects to a remote server described by cAddress, that can be specified
* only in quad dot IPV4 notation (e.g. "127.0.0.1"), using the desired port.
* This version of hb_InetConnect does not use gethostbyname, and thus is thread
* safe and can be used in combination with hb_InetGetHosts to have a finer
* timeout control while connecting to a server, and a finer error control.
*
* The second version of this function accepts a pre-built socket
* as a parameter. This allows to kill asyncronously a thread waiting
* for hb_InetConnectIP to connect, and then cleaning up the leftover
* socket data. Also, it is possible to give timeout at the given SOCKET.
*
* On error, the error of the returned socket is set.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETDGRAM
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Create a datagram socket
* $SYNTAX$
* HB_INETDGRAM( [<lBroadcast>] ) -> SOCKET
* $ARGUMENTS$
* lBroadcast
* $RETURNS$
* An INET socket
* $DESCRIPTION$
* Creates a datagram-oriented socket that will be able to send data and
* eventually receive data. Since the socket is not bound, the program can't
* retrieve the address at which this socket appaers to be, but a second
* socket receiving a message sent from this one would be able to reply
* correctly with a datagram that can be read from a non-bound socket.
*
* If lBroadcast is set to .T., the routine creates a broadcast capable socket:
* it will be able to receive and send broadcast messages. On most systems this
* requires special user privileges.
*
* Returns the socket, and if an error occurs, the socket error message
* and code are set.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETDGRAMBIND
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Create a bound datagram socket
* $SYNTAX$
* HB_INETDGRAMBIND( <nPort>, [<cAddress> [, <lBroadcast>] ] ) -> SOCKET
* $ARGUMENTS$
* <nPort>
*
* <cAddress>
*
* <bBroadcast>
* $RETURNS$
* An INET socket
* $DESCRIPTION$
* Creates a datagram-oriented socket and binds it to a particular port, and
* eventually to a certain interface if cAddress is given and not NIL.
*
* If lBroadcast is set to .T., the routine creates a broadcast capable socket:
* it will be able to receive and send broadcast messages. On most systems this
* requires special user privileges.
*
* Returns the socket
*
* If an error occurs, the socket error message
* and code are set.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETDGRAMSEND
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Send data to a datagram socket
* $SYNTAX$
* HB_INETDGRAMSEND( <socket>, <cAddress>, <nPort>, <cBuffer> [, <nSize> ] ) -> nBytesSent
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cAddress>
*
* <nPort>
*
* <cBuffer>
*
* <nSize>
* $RETURNS$
* Returns number of bytes sent, or -1 on error
* $DESCRIPTION$
* Sends a datagram (a fixed length data) to a determined ip address (cAddress,
* to be specified in quad-dot notation) and port.
*
* If nSize is not specified,
* all the data in cBuffer will be sent; if nSize is specified, only
* the first nSize bytes of cBuffer will be sent.
*
* There isn't any guarantee that all the data required to be written is
* really sent to the socket: the calling program should check for the
* numeric return and send iteratively the unsent data to complete
* the message.
*
* Anyway, the raw datagram is sent and received as once, and any data
* less than the system datagram size will be sent and received
* as a single item.
*
* If the socket is created in broadcast mode, the cAddress element
* can be a broadcast address.
*
* Returns -1 on error, or the number of bytes actually sent on success.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETDGRAMRECV
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get data from a datagram socket
* $SYNTAX$
* HB_INETDGRAMRECV( <socket>, @<cBuffer> [, <nSize> ] ) -> nBytesRead
* $ARGUMENTS$
* <socket> a socket previously created / opened
*
* <cBuffer> is the target buffer and must be passed by reference
*
* <nSize>
* $RETURNS$
* Returns number of bytes read, or -1 on error
* $DESCRIPTION$
* Reads at maximum nSize bytes incoming from a UDP socket, if nSize is
* given, or reads at maximum cBuffer length if nSize is not given.
*
* There isn't any guarantee that all the data required to be read is
* really sent from the kernel to the application: the kernel should
* just return the last complete datagram that has been received, up
* to nSize bytes.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETCRLF
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get a CRLF sequence for internet protocols
* $SYNTAX$
* HB_INETCRLF() -> cResult
* $ARGUMENTS$
* (This function has no arguments)
* $RETURNS$
* Internet CRLF sequence
* $DESCRIPTION$
* Returns a CRLF sequence used in many internet protocols.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* HB_INETISSOCKET
* $CATEGORY$
* API
* $SUBCATEGORY$
* INET
* $ONELINER$
* Get whether a variable is a socket
* $SYNTAX$
* HB_INETISSOCKET( <socket> ) -> lResult
* $ARGUMENTS$
* <socket> a socket previously created / opened
* $RETURNS$
* Returns whether the passed parameter is a socket
* $DESCRIPTION$
*
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
*
* $COMPLIANCE$
* H
* $PLATFORMS$
*
* $FILES$
*
* $SEEALSO$
*
* $END$
*/