lwip网络通信socket_LWIP之SOCKET的实现

本文详细介绍了LWIP协议栈中SOCKET接口的实现,包括accept、bind、shutdown等标准接口的宏定义,并深入讨论了 lwip_accept 函数,涉及到netconn结构体和sockets数组的管理。此外,还探讨了socket创建、TCP连接建立的过程,以及listen、accept操作在连接管理中的作用。
摘要由CSDN通过智能技术生成

2009-05-11LWIP之SOCKET的实现

Lwip协议栈的实现目的,无非是要上层用来实现app的socket编程。好,我们就从socket开始。为了兼容性,lwip的socket应该也是提供标准的socket接口函数,恩,没错,在src\include\lwip\socket.h文件中可以看到下面的宏定义:

#if LWIP_COMPAT_SOCKETS

#define accept(a,b,c)lwip_accept(a,b,c)

#define bind(a,b,c) lwip_bind(a,b,c)

#define shutdown(a,b)lwip_shutdown(a,b)

#define closesocket(s)lwip_close(s)

#define connect(a,b,c)lwip_connect(a,b,c)

#define getsockname(a,b,c)lwip_getsockname(a,b,c)

#define getpeername(a,b,c)lwip_getpeername(a,b,c)

#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e)

#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e)

#define listen(a,b)lwip_listen(a,b)

#define recv(a,b,c,d)lwip_recv(a,b,c,d)

#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f)

#define send(a,b,c,d)lwip_send(a,b,c,d)

#define sendto(a,b,c,d,e,f)lwip_sendto(a,b,c,d,e,f)

#define socket(a,b,c)lwip_socket(a,b,c)

#define select(a,b,c,d,e)lwip_select(a,b,c,d,e)

#define ioctlsocket(a,b,c)lwip_ioctl(a,b,c)

#if LWIP_POSIX_SOCKETS_IO_NAMES

#define read(a,b,c)lwip_read(a,b,c)

#define write(a,b,c)lwip_write(a,b,c)

#define close(s)lwip_close(s)

先不说实际的实现函数,光看这些定义的宏,就是标准socket所必须有的接口。

接着看这些实际的函数实现。这些函数实现在src\api\socket.c中。先看下接受连接的函数,这个是tcp的

原型:int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen)

可以看到这里的socket类型参数s,实际上是个int型

在这个函数中的第一个函数调用是sock = get_socket(s);

这里的sock变量类型是lwip_socket,定义如下:

/** Contains all internal pointers and states used for a socket */

struct lwip_socket {

/** sockets currently are built on netconns, each socket has one netconn */

struct netconn *conn;

/** data that was left from the previous read */

struct netbuf *lastdata;

/** offset in the data that was left from the previous read */

u16_t lastoffset;

/** number of times data was received, set by event_callback(),

tested by

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值