【牛客网C++服务器项目学习】-Day11-socket编程的相关API函数

项目学习地址:【牛客网C++服务器项目学习】

day 11

socket通信过程:

【牛客网C++服务器项目学习】-Day11-socket编程的相关API函数_第1张图片

1.socket函数

int socket(int domain, int type, int protocol);
功能:
	- 创建一个文件描述符用于主机之间端对端的通信
参数:
	- domain:domain是指定一个协议族用于通信,能够使用的协议族在头文件<sys/socket.h>中被定义好了:
    	- AF_UNIX, AF_LOCAL   Local communication              unix(7)
       	- AF_INET             IPv4 Internet protocols          ip(7)
       	- AF_INET6            IPv6 Internet protocols
    - type: 套接字具有指定的类型,它指定了通信语义。目前定义的类型有:(罗列用于TCP和UDP的)
    	- SOCK_STREAM
        - SOCK_DGRAM
    - protocol:在第一个参数domain中我们指定了用于通信的协议族。既然是协议族,那么一个协议族中可能会包含多个协议
    			参数protocol就是用来指定具体的协议的。如果该参数为0,一般是使用协议族中的默认协议。
返回值:
    - 成功执行,返回一个文件描述符;错误,返回-1

2.bind函数

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:将一个由socket()函数创建的文件描述符sockfd,在内存空间中赋于一个地址。不过这个函数通常也叫作“给socket赋于一个
      名字”
参数:
	- sockfd:由socket函数得到的文件描述符
    - addr:socket地址结构体的首地址。客户端的IP地址和端口号信息
    - addrlen:结构体的长度
返回值:成功返回0,失败返回-1

3.listen函数

int listen(int sockfd, int backlog);
功能:Listen()将sockfd所引用的套接字标记为被动套接字,然后使用accept()函数来接收传入的连接请求的套接字。
参数:
	- sockfd:需要监听(标记)的套接字文件描述符
    - backlog:backlog参数定义了sockfd的挂起连接队列可以增长的最大长度。如果在队列满时到达连接请求,
    	客户机可能会收到一个指示为ECONNREFUSED的错误,或者,如果底层协议支持重传,则可能会忽略该请求,以便稍后重试连接成功。
返回值:成功返回0,失败返回-1

4.connect函数

int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
功能:connect()系统调用将文件描述符sockfd所引用的套接字连接到addr所指定的地址。
参数:
	- sockfd:需要连接的主机的套接字
    - addr:需要连接的服务端的地址
    - addrlen:地址长度
返回值:成功返回0,失败返回-1

5.accept函数

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:提取监听套接字sockfd的挂起连接队列上的第一个连接请求,创建一个新的连接套接字,并返回一个引用该套接字的新文件描述符。
参数:
	- sockfd:参数sockfd是一个用socket(2)创建的套接字,用bind(2)绑定到一个本地地址,并在listen(2)之后监听连接。
    - addr:一个传出参数。该结构体最后会记录下所连接的客服端的IP地址和端口号
    - addrlen:第二个参数的长度
返回值:
	- 成功:返回一个新的文件描述符
    - 失败: -1

你可能感兴趣的:(服务器项目学习,服务器,c++,linux,后端,centos)