全志科技
直播中

维生素B2

12年用户 988经验值
私信 关注
[问答]

为什么LwIP调用setsockopt设置socket属性会失败呢

为什么LwIP调用setsockopt设置socket属性会失败呢?getsockopt获取socket属性也失败了呢?


回帖(1)

王文娥

2021-12-29 15:40:54
LwIP 当前版本有部分套接字属性的设置/获取是暂时没有支持的,操作这些属性会返回 errno = ENOPROTOOPT 的错误码。

解决办法


以 SDK 中 lwip-2.0.3 举例。可以通过打开文件 include/net /lwip-2.0.3 /lwip/sockets.h 查看当前版本 LwIP 支持哪些真实属性的设置/获取。



#define SO_DEBUG 0x0001 /* 未实现:开启调试信息记录 */
#define SO_ACCEPTCONN 0x0002 /* 套接字已经监听() */
#define SO_DONTROUTE 0x0010 /* 未实现:只使用接口地址 */
#define SO_USELOOPBACK 0x0040 /* 未实现:尽可能绕过硬件 */
#define SO_LINGER 0x0080 /* 如果数据存在,则在关闭时逗留 */
#define SO_DONTLINGER ((int)(~SO_LINGER))
#define SO_OOBINLINE 0x0100 /* 未实现:将接收到的 OOB 数据保留在行中 */
#define SO_REUSEPORT 0x0200 /* 未实现:允许本地地址和端口重用 */
#define SO_SNDBUF 0x1001 /* 未实现:发送缓冲区大小 */
#define SO_RCVBUF 0x1002 /* 接收缓冲区大小 */
#define SO_SNDLOWAT 0x1003 /* 未实现:发送低水位标记 */
#define SO_RCVLOWAT 0x1004 /* 未实现:接收低水位标记 */
#define SO_SNDTIMEO 0x1005 /* 发送超时 */
#define SO_RCVTIMEO 0x1006 /* 接收超时 */
#define SO_ERROR 0x1007 /* 获取错误状态并清除 */
#define SO_TYPE 0x1008 /* 获取套接字类型 */
#define SO_CONTIMEO 0x1009 /* 未实现:连接超时 */
#define SO_NO_CHECK 0x100a /* 不创建 UDP 校验和 */


如上所示,如果该属性后的声音有未实现,则未支持。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分