编程接口指南

异步连接模式服务

对于连接模式服务,应用程序不仅可以安排数据传送,还可以对异步完成的建立连接本身进行安排。操作顺序取决于该进程是尝试连接到其他进程还是等待连接尝试。

异步建立连接

进程可以尝试某个连接并异步完成该连接。进程将首先创建连接端点,然后使用 fcntl(2) 针对非阻塞操作配置该端点。与无连接数据传送一样,还可以针对连接完成时的异步通知和后续数据传送来配置该端点。然后,连接进程将使用 t_connect(3NSL) 开始进行传送设置。随后将使用 t_rcvconnect(3NSL) 来确认连接的建立。

异步使用连接

要异步等待连接,进程应首先建立一个绑定到服务地址的非阻塞端点。当 poll(2) 的结果或异步通知指示连接请求到达时,该进程可以使用 t_listen(3NSL) 来获取连接请求。要接受该连接,进程可以使用 t_accept(3NSL)。必须针对异步数据传送分别配置响应端点。

以下示例说明如何异步请求连接。

#include <tiuser.h>

int             fd;

struct t_call   *call;



	fd = .../* establish a non-blocking endpoint */



	call = (struct t_call *) t_alloc(fd, T_CALL, T_ADDR);

	.../* initialize call structure */

	t_connect(fd, call, call);



	/* connection request is now proceeding asynchronously */



	.../* receive indication that connection has been accepted */

	t_rcvconnect(fd, &call);

以下示例说明如何异步侦听连接。

#include <tiuser.h>

int             fd, res_fd;

struct t_call   call;



	fd = ... /* establish non-blocking endpoint */



	.../*receive indication that connection request has arrived

*/

	call = (struct t_call *) t_alloc(fd, T_CALL, T_ALL);

	t_listen(fd, &call);



	.../* determine whether or not to accept connection */

	res_fd = ... /* establish non-blocking endpoint for response

*/

	t_accept(fd, res_fd, call);