Socket函数

一、 Socket函数 

#include 
#include 
#include  // 包含了这个头文件,上面两个就可以省略
int socket(int domain, int type, int protocol);
- 功能:创建一个套接字
- 参数:
- domain: 协议族
AF_INET : ipv4
AF_INET6 : ipv6
AF_UNIX, AF_LOCAL : 本地套接字通信(进程间通信)
- type: 通信过程中使用的协议类型
SOCK_STREAM : 流式协议
SOCK_DGRAM : 报式协议
- protocol : 具体的一个协议。一般写0
- SOCK_STREAM : 流式协议默认使用 TCP
- SOCK_DGRAM : 报式协议默认使用 UDP
- 返回值:
- 成功:返回文件描述符,操作的就是内核缓冲区。
- 失败:-1

二、bind函数

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); // socket命名
- 功能:绑定,将fd 和本地的IP + 端口进行绑定
- 参数:
- sockfd : 通过socket函数得到的文件描述符
- addr : 需要绑定的socket地址,这个地址封装了ip和端口号的信息
- addrlen : 第二个参数结构体占的内存大小

三、listen函数

底层是两个队列,一个是未连接,一个是连接的。 总和最大值为backlog

int listen(int sockfd, int backlog); // /proc/sys/net/core/somaxconn
- 功能:监听这个socket上的连接
- 参数:
- sockfd : 通过socket()函数得到的文件描述符
- backlog : 未连接的和已经连接的和的最大值, 5
成功返回 0 失败-1

四、accept函数

        重新创建一个用于通信的文件描述符,之前的socket创建的用于监听的,而accept创建的文件描述符专门用于和客户端进行通信

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- 功能:接收客户端连接,默认是一个阻塞的函数,阻塞等待客户端连接
- 参数:
- sockfd : 用于监听的文件描述符
- addr : 传出参数,记录了连接成功后客户端的地址信息(ip,port)
- addrlen : 指定第二个参数的对应的内存大小
- 返回值:
- 成功 :用于通信的文件描述符
- -1 : 失败

五、connect函数

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- 功能: 客户端连接服务器
- 参数:
- sockfd : 用于通信的文件描述符
- addr : 客户端要连接的服务器的地址信息
- addrlen : 第二个参数的内存大小
- 返回值:成功 0, 失败 -1

六、写数据和读数据

ssize_t write(int fd, const void *buf, size_t count); // 写数据
ssize_t read(int fd, void *buf, size_t count); // 读数据

1.ssize_t read(int fd, void *buf, size_t count);
fd 是文件描述符,表示要从中读取数据的文件。
buf 是一个指向存储读取数据的内存缓冲区的指针。
count 是要读取的字节数。
返回值:

如果成功读取数据,read 返回实际读取的字节数(非负整数)。
如果已经到达文件的末尾(EOF),read 返回 0。
如果发生错误,read 返回 -1,并设置全局变量 errno 以指示错误类型。
2. ssize_t write(int fd, const void *buf, size_t count);
fd 是文件描述符,表示要写入数据的文件。
buf 是一个指向包含要写入的数据的内存缓冲区的指针。
count 是要写入的字节数。
返回值:

如果成功写入数据,write 返回实际写入的字节数。
如果发生错误,write 返回 -1,并设置全局变量 errno 以指示错误类型。

你可能感兴趣的:(linux,运维,服务器,网络,tcp/ip,ubuntu)