当前位置:网站首页>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
边栏推荐
- [MySQL 11] how to solve the case sensitive problem of MySQL 8.0.18
- Go language foundation ----- 03 ----- process control, function, value transfer, reference transfer, defer function
- Robots protocol
- 华为交换机配置ssh登录远程管理交换机
- go语言-循环语句
- 【MySQL 14】使用DBeaver工具远程备份及恢复MySQL数据库(Linux 环境)
- Technical dry goods | hundred lines of code to write Bert, Shengsi mindspire ability reward
- 技术干货|昇思MindSpore NLP模型迁移之Roberta ——情感分析任务
- Go language foundation ----- 11 ----- regular expression
- Enter three times and guess a number
猜你喜欢

Go language foundation ----- 13 ----- file

PAT甲级 1027 Colors in Mars

技术干货|利用昇思MindSpore复现ICCV2021 Best Paper Swin Transformer

【LeetCode】3. Merge two sorted lists · merge two ordered linked lists

Iterm2设置

Leetcode 213: looting II

【踩坑系列】mysql 修改root密码失败

Unity XR实现交互(抓取,移动旋转,传送,射击)-Pico

技术干货|关于AI Architecture未来的一些思考

項目經驗分享:實現一個昇思MindSpore 圖層 IR 融合優化 pass
随机推荐
Professor Zhang Yang of the University of Michigan is employed as a visiting professor of Shanghai Jiaotong University, China (picture)
技术干货 | AlphaFold/ RoseTTAFold开源复现(2)—AlphaFold流程分析和训练构建
研究显示乳腺癌细胞更容易在患者睡觉时进入血液
HarmonyOS第三次培训笔记
Read config configuration file of vertx
Structure of golang
技术干货|昇思MindSpore可变序列长度的动态Transformer已发布!
Redis查看客户端连接
Vertx restful style web router
Industrial resilience
List exercises after class
技术干货|昇思MindSpore NLP模型迁移之Roberta ——情感分析任务
Precautions for opensips and TLS SIP trunk docking
Go language foundation ----- 01 ----- go language features
PAT甲级 1028 List Sorting
Leetcode 198: house raiding
一篇文章让你读懂-曼彻斯特编码
基于RNA的新型癌症疗法介绍
[MySQL 12] MySQL 8.0.18 reinitialization
华为交换机配置ssh登录远程管理交换机