当前位置:网站首页>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
边栏推荐
- Redis查看客户端连接
- Grpc message sending of vertx
- Go language foundation ----- 04 ----- closure, array slice, map, package
- Pat grade a 1029 median
- Technical dry goods | alphafold/ rosettafold open source reproduction (2) - alphafold process analysis and training Construction
- Go language foundation ------ 12 ------ JSON
- 输入三次猜一个数字
- Pat class a 1031 Hello world for u
- 【踩坑系列】mysql 修改root密码失败
- Technical dry goods | reproduce iccv2021 best paper swing transformer with Shengsi mindspire
猜你喜欢

Go language foundation ----- 03 ----- process control, function, value transfer, reference transfer, defer function

Inverted chain disk storage in Lucene (pfordelta)

Pat grade a 1029 median

Project experience sharing: Based on mindspore, the acoustic model is realized by using dfcnn and CTC loss function

圖像識別與檢測--筆記

Project experience sharing: realize an IR Fusion optimization pass of Shengsi mindspire layer

Go language foundation ----- 11 ----- regular expression

【LeetCode】3. Merge Two Sorted Lists·合并两个有序链表

Technical dry goods Shengsi mindspire lite1.5 feature release, bringing a new end-to-end AI experience

OSPF experiment
随机推荐
【MySQL 14】使用DBeaver工具远程备份及恢复MySQL数据库(Linux 环境)
opensips与对方tls sip trunk对接注意事项
Go language foundation ----- 13 ----- file
Rabbit MQ message sending of vertx
Introduction of novel RNA based cancer therapies
【LeetCode】2. Valid Parentheses·有效的括号
Go language foundation ------ 14 ------ gotest
EtherCAT state machine transition (ESM)
[mindspire paper presentation] summary of training skills in AAAI long tail problem
Lucene introduces NFA
PAT甲级 1027 Colors in Mars
Precautions for opensips and TLS SIP trunk docking
C2-关于VCF文件合并的几种方法
Technology dry goods | luxe model for the migration of mindspore NLP model -- reading comprehension task
Technical dry goods | alphafold/ rosettafold open source reproduction (2) - alphafold process analysis and training Construction
哪一刻你才发现青春结束了
項目經驗分享:實現一個昇思MindSpore 圖層 IR 融合優化 pass
优质博客——
The difference between typescript let and VaR
Go language foundation ----- 02 ----- basic data types and operators