1. 程式人生 > >Lwip:原生態的Linux socket應用如何移植到Lwip上

Lwip:原生態的Linux socket應用如何移植到Lwip上

ber group cast inux dont 開源 not ons dto

lwIP - A Lightweight TCP/IP stack

在上一篇中,我們了解到在OpenFastPath上如何移植原生態的Linux Socket應用程序,那麽,對於另外一個老牌的小型TCPIP協議棧------LWIP,又是如何處理這個問題的。

1、lwip重新定義了函數符號

#define listen(s,backlog)                         lwip_listen(s,backlog)
/** @ingroup socket */
#define recv(s,mem,len,flags)                     lwip_recv(s,mem,len,flags)
/*
* @ingroup socket */ #define recvmsg(s,message,flags) lwip_recvmsg(s,message,flags) /** @ingroup socket */ #define recvfrom(s,mem,len,flags,from,fromlen) lwip_recvfrom(s,mem,len,flags,from,fromlen) /** @ingroup socket */ #define send(s,dataptr,size,flags) lwip_send(s,dataptr,size,flags) /*
* @ingroup socket */ #define sendmsg(s,message,flags) lwip_sendmsg(s,message,flags) /** @ingroup socket */ #define sendto(s,dataptr,size,flags,to,tolen) lwip_sendto(s,dataptr,size,flags,to,tolen) /** @ingroup socket */ #define socket(domain,type,protocol) lwip_socket(domain,type,protocol) #if
LWIP_SOCKET_SELECT /** @ingroup socket */ #define select(maxfdp1,readset,writeset,exceptset,timeout) lwip_select(maxfdp1,readset,writeset,exceptset,timeout) #endif #if LWIP_SOCKET_POLL /** @ingroup socket */ #define poll(fds,nfds,timeout) lwip_poll(fds,nfds,timeout) #endif

2、lwip重新定義了socket結構體

#if LWIP_IPV4
/* members are in network byte order */
struct sockaddr_in {
  u8_t            sin_len;
  sa_family_t     sin_family;
  in_port_t       sin_port;
  struct in_addr  sin_addr;
#define SIN_ZERO_LEN 8
  char            sin_zero[SIN_ZERO_LEN];
};
#endif /* LWIP_IPV4 */

3、lwip重新定義了socket宏

/* Socket protocol types (TCP/UDP/RAW) */
#define SOCK_STREAM     1
#define SOCK_DGRAM      2
#define SOCK_RAW        3

/*
 * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c)
 */
#define SO_REUSEADDR   0x0004 /* Allow local address reuse */
#define SO_KEEPALIVE   0x0008 /* keep connections alive */
#define SO_BROADCAST   0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */


/*
 * Additional options, not kept in so_options.
 */
#define SO_DEBUG        0x0001 /* Unimplemented: turn on debugging info recording */
#define SO_ACCEPTCONN   0x0002 /* socket has had listen() */
#define SO_DONTROUTE    0x0010 /* Unimplemented: just use interface addresses */
#define SO_USELOOPBACK  0x0040 /* Unimplemented: bypass hardware when possible */
#define SO_LINGER       0x0080 /* linger on close if data present */
#define SO_DONTLINGER   ((int)(~SO_LINGER))

說句題外話:LWIP從2012年的1.4.1版本後基本沒有更新了,近兩年突然發布了很多新版本,功能(主要是apps)也大大增強,說明這個開源還是有一定市場基礎的。

Lwip:原生態的Linux socket應用如何移植到Lwip上