1 onps栈使用说明——API接口手册( 四 )


  • socket:创建一个socket,目前仅支持udp和tcp两种类型
  • close:关闭一个socket,释放当前占用的协议栈资源
  • connect:与目标tcp服务器建立连接(阻塞型)或绑定一个固定的udp服务器地址
  • connect_nb:与目标tcp服务器建立连接(非阻塞型)
  • is_tcp_connected:获取当前tcp链路的连接状态
  • send:数据发送函数,tcp链路下为阻塞型
  • send_nb:数据发送函数,非阻塞型
  • is_tcp_send_ok:数据是否已成功送达tcp链路的对端(收到tcp ack报文)
  • sendto:udp数据发送函数,发送数据到指定目标地址
  • recv:数据接收函数,udp/tcp链路通用
  • recvfrom:数据接收函数,用于udp链路,接收数据的同时函数会返回数据源的地址信息
  • socket_set_rcv_timeout:设定recv()函数接收等待的时长,单位:秒
  • bind:绑定一个固定端口、地址
  • listen:tcp服务器进入监听状态
  • accept:接受一个到达的tcp连接请求
  • tcpsrv_recv_poll:tcp服务器专用函数,等待任意一个或多个tcp客户端数据到达信号
  • socket_get_last_error:获取socket最近一次发生的错误信息
  • socket_get_last_error_code:获取socket最近一次发生的错误编码
socket功能
创建一个socket,支持udp和tcp两种类型,即:SOCK_DGRAM和SOCK_STREAM 。注意,不使用时一定要调用close()函数关闭,以释放其占用的协议栈相关资源 。
原型
SOCKET socket(INT family, INT type, INT protocol, EN_ONPSERR *penErr);
入口参数
  • family:目前仅支持IPv4地址,即AF_INET,其它地址族如AF_INET6之类的不支持
  • type:指定socket类型,支持SOCK_STREAM和SOCK_DGRAM两种类型,前者为tcp,后者为udp
  • protocol:未使用,固定为0
  • penErr:指向错误编码的指针,当socket()函数执行失败,该参数用于接收实际的错误码
返回值
执行成功返回socket句柄,失败返回INVALID_SOCKET,具体的错误信息参见penErr参数返回的错误码 。
示例
EN_ONPSERR enErr;//* tcpSOCKET hSocket = socket(AF_INET, SOCK_STREAM, 0, &enErr);if(INVALID_SOCKET == hSocket) //* 返回一个无效的socketprintf("%s\r\n", onps_error(enErr)); //*打印错误信息//* udpSOCKET hSocket = socket(AF_INET, SOCK_DGRAM, 0, &enErr);……返回目录
close功能
关闭socket,释放占用的协议栈资源 。
原型
void close(SOCKET socket);
入口参数
  • socket:要关闭的socket句柄
返回值

示例
EN_ONPSERR enErr;SOCKET hSocket = socket(AF_INET, SOCK_STREAM, 0, &enErr);……if(INVALID_SOCKET != hSocket)close(hSocket);返回目录
connect功能
用于tcp类型的socket时,其功能为与目标服务器建立tcp连接,阻塞型;用于udp类型的socket时,其功能为绑定一个固定的目标通讯地址,udp通讯均与这个固定地址进行 。
原型
INT connect(SOCKET socket, const CHAR *srv_ip, USHORT srv_port, INT nConnTimeout);
入口参数
  • socket:要进行connect操作的socket句柄
  • srv_ip:目标服务器地址
  • srv_port:目标服务器端口
  • nConnTimeout:仅用于tcp通讯,指定连接超时时间(单位:秒),参数值如小于等于0则协议栈会采用缺省值,该值由TCP_CONN_TIMEOUT宏指定(参见sys_config.h);udp通讯未使用这个参数,可以指定任意一个值
返回值
0:连接成功
-1:连接失败,具体的错误信息通过onps_get_last_error()获得
示例
EN_ONPSERR enErr;SOCKET hSocket = socket(AF_INET, SOCK_STREAM, 0, &enErr);if(INVALID_SOCKET == hSocket){printf("%s\r\n", onps_error(enErr));return;}if(!connect(hSocket, "47.92.239.107", 6410, 10)){//* 连接成功,在这里添加你的自定义代码……}else{//* 连接失败,打印错误信息printf("%s\r\n", onps_get_last_error(hSocket, NULL));}……close(hSocket);

经验总结扩展阅读