LWIP
?/p>
SOCKET
的实?/p>
http://bluefish.blog.51cto.com/214870/158413
Lwip
协议栈的实现目的,无非是要上层用来实?/p>
app
?/p>
socket
编程。好,我?/p>
就从
socket
开始。为了兼容性,
lwip
?/p>
socket
应该也是提供标准?/p>
socket
接口?/p>
数,恩,没错,在
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
所必须有的接口?/p>
接着看这些实际的函数实现。这些函数实现在
src\api\socket.c
中。先看下?/p>
受连接的函数,这个是
tcp
?/p>
原型?/p>
int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
可以看到这里?/p>
socket
类型参数
s
,实际上是个
int
?/p>
在这个函数中的第一个函数调用是
sock = get_socket(s);