当前位置:网站首页>LwIP learning socket (API)
LwIP learning socket (API)
2022-07-03 07:44:00 【Seven demons 71】
Socket Interface programming
Socket API
1.Socket()
Interface prototype
int
lwip_socket(int domain, int type, int protocol)
Function function :
Used according to the specified address family 、 Data type and protocol to allocate the description word of a socket interface and the resources it uses
Function into the reference :
domain
Address family AF_INET(IP_V4)、AF_INET6(IP_V6)type
Three protocol types are supported Socket protocol types (TCP/UDP/RAW)
#define SOCK_STREAM 1 // Streaming sockets provide reliable 、 Connection oriented traffic ; It USES TCP agreement , So as to ensure the correctness and order of data transmission .
#define SOCK_DGRAM 2// Datagram sockets define a connectionless service , Data is transmitted through independent messages , Is chaotic , And it's not guaranteed to be reliable 、 Error free . It uses datagram protocol UDP.
#define SOCK_RAW 3// Raw sockets allow for underlying protocols such as IP or ICMP Make a direct visit , Powerful but inconvenient to use , Mainly used for the development of some protocols .
protocol
The protocol used by the system , Its definition is as follows
#define IPPROTO_IP 0
#define IPPROTO_ICMP 1
#define IPPROTO_TCP 6
#define IPPROTO_UDP 17
Can be protocol The value of the set 0, The system will automatically deduce what protocol should be used . So it is generally written 0.
Return value
Create error return -1
Index number returned after creation
2.blind()
Interface prototype blind
int
lwip_bind(int s, const struct sockaddr *name, socklen_t namelen)
Function function :
take sockaddr Some properties described in the structure (IP Address 、 Port number 、 Address cluster ) And socket Socket binding , Also called naming sockets .
Function into the reference :
int s
:socket() Returns the socket represented by the file descriptor const struct sockaddr *name
: It stores the address and port used by the server for communication .
sockaddr The structure is as follows :
struct sockaddr {
u8_t sa_len;
u8_t sa_family;
char sa_data[14];
};
The actual structure of this parameter depends on the network protocol family , Then add the forced conversion to sockaddr Type in API function . such as AF_INET Will use sockaddr_in
Structure as actual structure .
AF_INET6 Will use sockaddr_in6
Structure as actual structure . And then force it to const struct sockaddr *name Solve the warning and error on compilation .
socklen_t namelen
The length of the previous parameter structure .
Return value
Successfully returns 0;
Error return -1; The cause of the error is saved in errno in .( Generally, the address binding is wrong 、 Port occupied )
3.listen()
Interface prototype
int
lwip_listen(int s, int backlog)
Function function :
listen Function uses the active socket interface to be connected socket interface , Make one process accept requests from other processes , And become a server process .
Function into the reference :
int s
:socket() Returns the socket represented by the file descriptor backlog
: The length of the listening queue , When the number of connections > This value , The requested connection of the client will be rejected
Return value
Successfully returns 0;
Error return -1;
4.accept()
Interface prototype
int
lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
Function function :
Extract the first connection request in the waiting connection queue of the listening socket , Create a new socket , And returns the file descriptor pointing to the socket . It is generally used to block processes in the server , Wait for the client to connect .
Function into the reference :
With the above blind() The input parameters of are consistent and will not be repeated here .
Return value
Returns the file descriptor pointing to the socket .
Failure to return :-1; The cause of the error is saved in errno in .
5.connect()
Interface prototype
int
lwip_connect(int s, const struct sockaddr *name, socklen_t namelen)
Function function :
Used to establish and specify socket The connection of . Generally used for client ,
Function into the reference :
With the above blind() The input parameters of are consistent and will not be repeated here .
Return value
Successfully returns :0
Failure to return :-1; The cause of the error is saved in errno in .
6. read / Write read()/write()、recv()/send()
Here is lwip in read()
and write()
Function source code , Just for recvfrom()
and send()
Subpackaging read()
Function definition :
int
lwip_read(int s, void *mem, size_t len)
{
return lwip_recvfrom(s, mem, len, 0, NULL, NULL);
}
write()
Function definition :
int
lwip_write(int s, const void *data, size_t size)
{
return lwip_send(s, data, size, 0);
}
recv()
Function definition :
int
lwip_recv(int s, void *mem, size_t len, int flags)
{
return lwip_recvfrom(s, mem, len, flags, NULL, NULL);
}
send()
Function definition :
int
lwip_send(int s, const void *data, size_t size, int flags)
Function into the reference :
int s
: The socket represented by the target connection file descriptor const void *data
: Pointer to send data void *mem
: Memory address to receive data int flags
: Sign a
7.close()
Interface prototype
int
lwip_close(int s)
Function function :
close socket Connect
Function into the reference :
int s
: The socket represented by the file descriptor
Return value
Successfully returns :0
Failure to return :-1
First, let's briefly introduce the common socket Of api function , also select()、lwip_shutdown() Then fill in . After that, we will analyze each api Source code . Deepen the understanding . If there is something wrong in the article, please point it out
边栏推荐
- PAT甲级 1032 Sharing
- Unity XR实现交互(抓取,移动旋转,传送,射击)-Pico
- Go language foundation ----- 06 ----- anonymous fields, fields with the same name
- Traversal in Lucene
- The difference between typescript let and VaR
- 【CoppeliaSim4.3】C#调用 remoteApi控制场景中UR5
- Technology dry goods | luxe model for the migration of mindspore NLP model -- reading comprehension task
- Go language foundation ----- 03 ----- process control, function, value transfer, reference transfer, defer function
- 技术干货|昇思MindSpore初级课程上线:从基本概念到实操,1小时上手!
- An overview of IfM Engage
猜你喜欢
PAT甲级 1032 Sharing
研究显示乳腺癌细胞更容易在患者睡觉时进入血液
Harmonyos third training notes
[coppeliasim4.3] C calls UR5 in the remoteapi control scenario
Project experience sharing: Based on mindspore, the acoustic model is realized by using dfcnn and CTC loss function
Analysis of the ninth Blue Bridge Cup single chip microcomputer provincial competition
Usage of requests module
技术干货|昇思MindSpore算子并行+异构并行,使能32卡训练2420亿参数模型
技术干货|昇思MindSpore NLP模型迁移之LUKE模型——阅读理解任务
Pat class a 1032 sharing
随机推荐
Redis批量启停脚本
PAT甲级 1028 List Sorting
PAT甲级 1029 Median
Go language foundation ----- 09 ----- exception handling (error, panic, recover)
PAT甲级 1030 Travel Plan
Go language foundation ----- 01 ----- go language features
Introduction of novel RNA based cancer therapies
【MySQL 13】安装MySQL后第一次修改密码,可以可跳过MySQL密码验证进行登录
华为交换机Console密码重置、设备初始化、默认密码
Research shows that breast cancer cells are more likely to enter the blood when patients sleep
Go language foundation ----- 06 ----- anonymous fields, fields with the same name
Analysis of the problems of the 7th Blue Bridge Cup single chip microcomputer provincial competition
【LeetCode】2. Valid parentheses · valid parentheses
【LeetCode】3. Merge two sorted lists · merge two ordered linked lists
Analysis of the ninth Blue Bridge Cup single chip microcomputer provincial competition
【LeetCode】3. Merge Two Sorted Lists·合并两个有序链表
圖像識別與檢測--筆記
优质博客——
HCIA notes
Technical dry goods | hundred lines of code to write Bert, Shengsi mindspire ability reward