socket_set_rcv_timeout功能
设定recv()函数接收等待的时长 。其设定的接收等待时长决定了recv()函数的阻塞类型 。等于0:非阻塞,recv()不等待立即返回大于0:阻塞 , recv()等待指定时长直至数据到达或超时小于0:阻塞,recv()一直等待直至数据到达或出错
原型
BOOL socket_set_rcv_timeout(SOCKET socket, CHAR bRcvTimeout, EN_ONPSERR *penErr);
入口参数
- family:目前仅支持IPv4地址,即AF_INET,其它地址族如AF_INET6之类的不支持
- bRcvTimeout:recv()函数的接收等待时长,单位:秒
- penErr:指向错误编码的指针 , 当socket()函数执行失败,该参数用于接收实际的错误码
设置成功返回TRUE,否则返回FALSE,具体的错误信息通过参数penErr获得 。
示例
EN_ONPSERR enErr;……if(!socket_set_rcv_timeout(hSocket, 1, &enErr)){//* 设置失败,打印错误信息 , 此时系统采用缺省值,即recv()函数一直等待直至收到数据或协议栈报错printf("%s\r\n", onps_error(enErr));}……
返回目录recvfrom功能
接收数据并返回数据源的地址信息,仅用于udp通讯 。
原型
INT recvfrom(SOCKET socket, UCHAR *pubDataBuf, INT nDataBufSize, in_addr_t *punFromIP, USHORT *pusFromPort);
入口参数
- family:目前仅支持IPv4地址,即AF_INET,其它地址族如AF_INET6之类的不支持
- pubDataBuf:指向数据接收缓冲区的指针
- nDataBufSize:数据接收缓冲区的大?。ノ唬鹤纸?/li>
- punFromIP:指向数据源ip地址的指针
- pusFromPort:指向数据源端口的指针
实际收到的数据的长度,单位:字节;小于0则接收失败,具体的的错误信息通过onps_get_last_error()获得 。
示例
EN_ONPSERR enErr;……UCHAR ubRcvBuf[512];in_addr_t unFromIp;USHORT usFromPort;INT nRcvBytes = recvfrom(hSocket, ubRcvBuf, sizeof(ubRcvBuf), &unFromIp, &usFromPort);if(nRcvBytes > 0) //* 收到数据{CHAR szAddr[20];printf("收到来自地址%s:%d的%d字节的数据\r\n", inet_ntoa_safe_ext(unFromIp, szAddr), usFromPort, nRcvBytes);……}else{if(nRcvBytes < 0) //* 协议栈底层捕捉到了一个严重错误,在这里增加你的容错代码并打印错误信息{……printf("发送失败,%s\r\n", onps_get_last_error(hSocket, NULL));}}……
返回目录bind功能
绑定一个ip地址和端口 。
原型
INT bind(SOCKET socket, const CHAR *pszNetifIp, USHORT usPort);
入口参数
- family:目前仅支持IPv4地址,即AF_INET,其它地址族如AF_INET6之类的不支持
- pszNetifIp:指向要绑定的ip地址的指针,为NULL绑定任意网络接口
- usPort: 要绑定的端口
0:成功-1:失败,具体的的错误信息通过onps_get_last_error()获得
示例
EN_ONPSERR enErr;……SOCKET hSockSrv = socket(AF_INET, SOCK_STREAM, 0, &enErr);if(INVALID_SOCKET != hSockSrv){if(!bind(hSockSrv, NULL, 6411)) //* 绑定成功……else //* 绑定失败printf("%s\r\n", onps_get_last_error(hSocket, NULL)); //* 打印错误信息}elseprintf("%s\r\n", onps_error(enErr)); //*打印错误信息……
返回目录listen功能
tcp服务器进入监听状态 , 等待tcp客户端连接请求的到达 。
原型
INT listen(SOCKET socket, USHORT backlog);
入口参数
- family:目前仅支持IPv4地址,即AF_INET , 其它地址族如AF_INET6之类的不支持
- backlog:等待用户层接受(accept)连接请求的tcp客户端数量
0:成功-1:失败,具体的的错误信息通过onps_get_last_error()获得
示例
EN_ONPSERR enErr;……SOCKET hSockSrv = socket(AF_INET, SOCK_STREAM, 0, &enErr);if(INVALID_SOCKET != hSockSrv){if(!bind(hSockSrv, NULL, 6411)) //* 绑定成功{if(!listen(hSockSrv, usBacklog)) //* 进入监听状态{……}else //* 失败printf("%s\r\n", onps_get_last_error(hSocket, NULL)); //* 打印错误信息}else //* 绑定失败printf("%s\r\n", onps_get_last_error(hSocket, NULL)); //* 打印错误信息}elseprintf("%s\r\n", onps_error(enErr)); //*打印错误信息……
返回目录accept功能
阻塞/非阻塞型,接受一个到达的tcp连接请求 。
原型
SOCKET accept(SOCKET socket, in_addr_t *punCltIP, USHORT *pusCltPort, INT nWaitSecs, EN_ONPSERR *penErr);
入口参数
- family:目前仅支持IPv4地址 , 即AF_INET,其它地址族如AF_INET6之类的不支持
- punCltIP:指向tcp客户端Ip地址的指针
- pusCltPort:指向tcp客户端端口的指针
- nWaitSecs:指定等待时长,单位:秒 。0 , 不等待,立即返回;大于0,等待指定时间直至收到一个客户端连接请求或超时;小于0 , 一直等待,直至收到一个客户端连接请求或协议栈报错
推荐阅读
- 索尼wf1000xm4怎么连接_索尼wf1000xm4使用说明
- 3 onps栈移植说明——添加网卡
- 2 onps栈移植说明——编译器及os适配层移植
- 1 onps栈移植说明——onps栈的配置及裁剪
- 开源网络协议栈onps诞生记
- <一>从指令角度了解函数堆栈调用过程
- 漫步者funbuds怎么配对_漫步者funbuds使用说明
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 都卷Java,你看看你得学多少技术栈才能工作!
- flutter系列之:flutter中可以建索引的栈布局IndexedStack