您的位置:首页 > 新闻 > 热点要闻 > lwip中socket的本质

lwip中socket的本质

2025/2/26 2:03:47 来源:https://blog.csdn.net/weixin_46720928/article/details/140011527  浏览:    关键词:lwip中socket的本质

(以下函数详见sockets.c)

与socket相关的两个概念

  • socket索引:int类型,取值为0、1、2…,对于类服务器,0通常是用于监听的lwip_accept,其他每连接一个客户端,依次分配1、2、3…,客户端正常断开连接后,分配的socket索引会回收,再次按从小到大的顺序重新分配给其他连接的客户端。
  • socket本身:结构体,包含socket相关的多种信息
    常用的socket函数使用的都是索引,目的是用简单的文件描述符的形式简化socket的应用。

socket索引

socket索引主要用于socket通信函数:

int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen)

其中的int s即socket索引

socket本身

/** Contains all internal pointers and states used for a socket */
struct lwip_sock {/** sockets currently are built on netconns, each socket has one netconn */struct netconn *conn;/** data that was left from the previous read */union lwip_sock_lastdata lastdata;
#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL/** number of times data was received, set by event_callback(),tested by the receive and select functions */s16_t rcvevent;/** number of times data was ACKed (free send buffer), set by event_callback(),tested by select */u16_t sendevent;/** error happened for this socket, set by event_callback(), tested by select */u16_t errevent;/** counter of how many threads are waiting for this socket using select */SELWAIT_T select_waiting;
#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */
#if LWIP_NETCONN_FULLDUPLEX/* counter of how many threads are using a struct lwip_sock (not the 'int') */u8_t fd_used;/* status of pending close/delete actions */u8_t fd_free_pending;
#define LWIP_SOCK_FD_FREE_TCP  1
#define LWIP_SOCK_FD_FREE_FREE 2
#endif
};

二者之间的联系

  sock = get_socket(s);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com