HTTPSend

Command group Flag affected Reversible Execute on client Platform(s)
External commands YES NO NO All

Syntax

HTTPSend (socket,buffer) Returns sent-byte-count

Description

Note: The flag is set according to whether Omnis was able to make a call to this external command.

This Web command is multi-threaded, allowing another thread to execute in the multi-threaded server while it runs. Note that the same socket cannot safely be used concurrently by more than one thread.

Socket is a long integer field containing the socket number of a connected socket.

Buffer is a character or binary field containing the data to send on the socket. If you pass a character field, then HTTPSend will convert the data to UTF-8, and then send the UTF-8.

HTTPSend returns the number of bytes it sent to sent-byte-count, a long integer field.

If the socket is in blocking mode, HTTPSend always sends all of the data, unless an error occurs.

If the socket is in non-blocking mode, HTTPSend sends as much data as it can without blocking.

If an error occurs, HTTPSend returns a negative error code

Notes

If the connection to the server is secure, HTTPSend always sends the data in blocking mode.

Non-blocking sockets return an error code of -10035 if the socket cannot accept the data to send immediately. Some implementations of socket libraries may have limits on the number of bytes you can send at one time. Consult the documentation for your installed sockets libraries. You may have to send a message in multiple chunks in order to send a very long message. Always check sent-byte-count to determine how much of the buffer has actually been sent; if the value is less than the buffer size, you need to call HTTPSend again, to send the rest of the buffer.

It does not make sense to send a character field on a non-blocking socket, because the sent-byte-count corresponds to the sent UTF-8 bytes.

Example

# Connect to the server IP address iHostName on port iPort and send
# the message iMessage
Calculate iHostName as '0.0.0.0'
Calculate iPort as 6000
Calculate lMessage as 'Hello remote application'
TCPConnect (iHostName,iPortReturns iSocket
If iSocket>0
  # connected
  HTTPSend (iSocket,lMessageReturns lByteCount
End If