📄 ioqueue.h
字号:
* @return PJ_SUCCESS on success or the error code.
*
* @see pj_ioqueue_is_pending
*/
PJ_DECL(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key );
/**
* Get user data associated with an ioqueue key.
*
* @param key The key that was previously obtained from registration.
*
* @return The user data associated with the descriptor, or NULL
* on error or if no data is associated with the key during
* registration.
*/
PJ_DECL(void*) pj_ioqueue_get_user_data( pj_ioqueue_key_t *key );
/**
* Set or change the user data to be associated with the file descriptor or
* handle or socket descriptor.
*
* @param key The key that was previously obtained from registration.
* @param user_data User data to be associated with the descriptor.
* @param old_data Optional parameter to retrieve the old user data.
*
* @return PJ_SUCCESS on success or the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_set_user_data( pj_ioqueue_key_t *key,
void *user_data,
void **old_data);
/**
* Initialize operation key.
*
* @param op_key The operation key to be initialied.
* @param size The size of the operation key.
*/
PJ_DECL(void) pj_ioqueue_op_key_init( pj_ioqueue_op_key_t *op_key,
pj_size_t size );
/**
* Check if operation is pending on the specified operation key.
* The \c op_key must have been initialized with #pj_ioqueue_op_key_init()
* or submitted as pending operation before, or otherwise the result
* is undefined.
*
* @param key The key.
* @param op_key The operation key, previously submitted to any of
* the I/O functions and has returned PJ_EPENDING.
*
* @return Non-zero if operation is still pending.
*/
PJ_DECL(pj_bool_t) pj_ioqueue_is_pending( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key );
/**
* Post completion status to the specified operation key and call the
* appropriate callback. When the callback is called, the number of bytes
* received in read/write callback or the status in accept/connect callback
* will be set from the \c bytes_status parameter.
*
* @param key The key.
* @param op_key Pending operation key.
* @param bytes_status Number of bytes or status to be set. A good value
* to put here is -PJ_ECANCELLED.
*
* @return PJ_SUCCESS if completion status has been successfully
* sent.
*/
PJ_DECL(pj_status_t) pj_ioqueue_post_completion( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_status );
#if defined(PJ_HAS_TCP) && PJ_HAS_TCP != 0
/**
* Instruct I/O Queue to accept incoming connection on the specified
* listening socket. This function will return immediately (i.e. non-blocking)
* regardless whether a connection is immediately available. If the function
* can't complete immediately, the caller will be notified about the incoming
* connection when it calls pj_ioqueue_poll(). If a new connection is
* immediately available, the function returns PJ_SUCCESS with the new
* connection; in this case, the callback WILL NOT be called.
*
* @param key The key which registered to the server socket.
* @param op_key An operation specific key to be associated with the
* pending operation, so that application can keep track of
* which operation has been completed when the callback is
* called.
* @param new_sock Argument which contain pointer to receive the new socket
* for the incoming connection.
* @param local Optional argument which contain pointer to variable to
* receive local address.
* @param remote Optional argument which contain pointer to variable to
* receive the remote address.
* @param addrlen On input, contains the length of the buffer for the
* address, and on output, contains the actual length of the
* address. This argument is optional.
* @return
* - PJ_SUCCESS When connection is available immediately, and the
* parameters will be updated to contain information about
* the new connection. In this case, a completion callback
* WILL NOT be called.
* - PJ_EPENDING If no connection is available immediately. When a new
* connection arrives, the callback will be called.
* - non-zero which indicates the appropriate error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
pj_sock_t *new_sock,
pj_sockaddr_t *local,
pj_sockaddr_t *remote,
int *addrlen );
/**
* Initiate non-blocking socket connect. If the socket can NOT be connected
* immediately, asynchronous connect() will be scheduled and caller will be
* notified via completion callback when it calls pj_ioqueue_poll(). If
* socket is connected immediately, the function returns PJ_SUCCESS and
* completion callback WILL NOT be called.
*
* @param key The key associated with TCP socket
* @param addr The remote address.
* @param addrlen The remote address length.
*
* @return
* - PJ_SUCCESS If socket is connected immediately. In this case, the
* completion callback WILL NOT be called.
* - PJ_EPENDING If operation is queued, or
* - non-zero Indicates the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_connect( pj_ioqueue_key_t *key,
const pj_sockaddr_t *addr,
int addrlen );
#endif /* PJ_HAS_TCP */
/**
* Poll the I/O Queue for completed events.
*
* @param ioque the I/O Queue.
* @param timeout polling timeout, or NULL if the thread wishes to wait
* indefinetely for the event.
*
* @return
* - zero if timed out (no event).
* - (<0) if error occured during polling. Callback will NOT be called.
* - (>1) to indicate numbers of events. Callbacks have been called.
*/
PJ_DECL(int) pj_ioqueue_poll( pj_ioqueue_t *ioque,
const pj_time_val *timeout);
/**
* Instruct the I/O Queue to read from the specified handle. This function
* returns immediately (i.e. non-blocking) regardless whether some data has
* been transfered. If the operation can't complete immediately, caller will
* be notified about the completion when it calls pj_ioqueue_poll(). If data
* is immediately available, the function will return PJ_SUCCESS and the
* callback WILL NOT be called.
*
* @param key The key that uniquely identifies the handle.
* @param op_key An operation specific key to be associated with the
* pending operation, so that application can keep track of
* which operation has been completed when the callback is
* called. Caller must make sure that this key remains
* valid until the function completes.
* @param buffer The buffer to hold the read data. The caller MUST make sure
* that this buffer remain valid until the framework completes
* reading the handle.
* @param length On input, it specifies the size of the buffer. If data is
* available to be read immediately, the function returns
* PJ_SUCCESS and this argument will be filled with the
* amount of data read. If the function is pending, caller
* will be notified about the amount of data read in the
* callback. This parameter can point to local variable in
* caller's stack and doesn't have to remain valid for the
* duration of pending operation.
* @param flags Recv flag. If flags has PJ_IOQUEUE_ALWAYS_ASYNC then
* the function will never return PJ_SUCCESS.
*
* @return
* - PJ_SUCCESS If immediate data has been received in the buffer. In this
* case, the callback WILL NOT be called.
* - PJ_EPENDING If the operation has been queued, and the callback will be
* called when data has been received.
* - non-zero The return value indicates the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
void *buffer,
pj_ssize_t *length,
pj_uint32_t flags );
/**
* This function behaves similarly as #pj_ioqueue_recv(), except that it is
* normally called for socket, and the remote address will also be returned
* along with the data. Caller MUST make sure that both buffer and addr
* remain valid until the framework completes reading the data.
*
* @param key The key that uniquely identifies the handle.
* @param op_key An operation specific key to be associated with the
* pending operation, so that application can keep track of
* which operation has been completed when the callback is
* called.
* @param buffer The buffer to hold the read data. The caller MUST make sure
* that this buffer remain valid until the framework completes
* reading the handle.
* @param length On input, it specifies the size of the buffer. If data is
* available to be read immediately, the function returns
* PJ_SUCCESS and this argument will be filled with the
* amount of data read. If the function is pending, caller
* will be notified about the amount of data read in the
* callback. This parameter can point to local variable in
* caller's stack and doesn't have to remain valid for the
* duration of pending operation.
* @param flags Recv flag. If flags has PJ_IOQUEUE_ALWAYS_ASYNC then
* the function will never return PJ_SUCCESS.
* @param addr Optional Pointer to buffer to receive the address.
* @param addrlen On input, specifies the length of the address buffer.
* On output, it will be filled with the actual length of
* the address. This argument can be NULL if \c addr is not
* specified.
*
* @return
* - PJ_SUCCESS If immediate data has been received. In this case, the
* callback must have been called before this function
* returns, and no pending operation is scheduled.
* - PJ_EPENDING If the operation has been queued.
* - non-zero The return value indicates the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_recvfrom( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
void *buffer,
pj_ssize_t *length,
pj_uint32_t flags,
pj_sockaddr_t *addr,
int *addrlen);
/**
* Instruct the I/O Queue to write to the handle. This function will return
* immediately (i.e. non-blocking) regardless whether some data has been
* transfered. If the function can't complete immediately, the caller will
* be notified about the completion when it calls pj_ioqueue_poll(). If
* operation completes immediately and data has been transfered, the function
* returns PJ_SUCCESS and the callback will NOT be called.
*
* @param key The key that identifies the handle.
* @param op_key An operation specific key to be associated with the
* pending operation, so that application can keep track of
* which operation has been completed when the callback is
* called.
* @param data The data to send. Caller MUST make sure that this buffer
* remains valid until the write operation completes.
* @param length On input, it specifies the length of data to send. When
* data was sent immediately, this function returns PJ_SUCCESS
* and this parameter contains the length of data sent. If
* data can not be sent immediately, an asynchronous operation
* is scheduled and caller will be notified via callback the
* number of bytes sent. This parameter can point to local
* variable on caller's stack and doesn't have to remain
* valid until the operation has completed.
* @param flags Send flags. If flags has PJ_IOQUEUE_ALWAYS_ASYNC then
* the function will never return PJ_SUCCESS.
*
* @return
* - PJ_SUCCESS If data was immediately transfered. In this case, no
* pending operation has been scheduled and the callback
* WILL NOT be called.
* - PJ_EPENDING If the operation has been queued. Once data base been
* transfered, the callback will be called.
* - non-zero The return value indicates the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
const void *data,
pj_ssize_t *length,
pj_uint32_t flags );
/**
* Instruct the I/O Queue to write to the handle. This function will return
* immediately (i.e. non-blocking) regardless whether some data has been
* transfered. If the function can't complete immediately, the caller will
* be notified about the completion when it calls pj_ioqueue_poll(). If
* operation completes immediately and data has been transfered, the function
* returns PJ_SUCCESS and the callback will NOT be called.
*
* @param key the key that identifies the handle.
* @param op_key An operation specific key to be associated with the
* pending operation, so that application can keep track of
* which operation has been completed when the callback is
* called.
* @param data the data to send. Caller MUST make sure that this buffer
* remains valid until the write operation completes.
* @param length On input, it specifies the length of data to send. When
* data was sent immediately, this function returns PJ_SUCCESS
* and this parameter contains the length of data sent. If
* data can not be sent immediately, an asynchronous operation
* is scheduled and caller will be notified via callback the
* number of bytes sent. This parameter can point to local
* variable on caller's stack and doesn't have to remain
* valid until the operation has completed.
* @param flags send flags. If flags has PJ_IOQUEUE_ALWAYS_ASYNC then
* the function will never return PJ_SUCCESS.
* @param addr Optional remote address.
* @param addrlen Remote address length, \c addr is specified.
*
* @return
* - PJ_SUCCESS If data was immediately written.
* - PJ_EPENDING If the operation has been queued.
* - non-zero The return value indicates the error code.
*/
PJ_DECL(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
const void *data,
pj_ssize_t *length,
pj_uint32_t flags,
const pj_sockaddr_t *addr,
int addrlen);
/**
* !}
*/
PJ_END_DECL
#endif /* __PJ_IOQUEUE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -