网络编程函数笔记

C网络编程

1、创建套接字

函数原型

#include <sys/type.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);
domain指定协议族,type参数指定套接字的通信类型,protocol指定使用的协议
type 取值包括SOCK_STREAM(流协议) 和 SOCK_DGRAM(数据报协议) 

2、套接字地址

结构体原型

AF_UNIX 域
struct sockaddr_un {
    sa_family_t sum_family;
    char sun_path[];
};
该结构定义在sys/un.h中

AF_INET 域
struct sockaddr_in { 
    short int  sin_family;
    unsigned short int sin_port;
    struct in_addr  sin_addr;
};
该结构定义在netinet/in.h  
结构体in_addr的结构定义为
struct in_addr {
    unsigned long int  s_addr;
};
  

3、命名套接字

#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, size_t address_len);
成功返回0,失败返回-1

4、创建套接字队列

函数原型

服务器创建一个队列来保存未处理的请求
#include <sys/socket.h>
int listen(int socket, int backlog);
backlog表示队列的长度,超过此长度的客户端请求将被拒绝。

5、接受连接

函数原型

#include <sys/socket.h>
int accept(int socket, struct sockaddr *address, size_t *address_len);
阻塞方法,直到客户端试图连接到socket套接字时才返回。
accept函数将创建一个新的套接字来与客户进行通信,并且返回新套接字的描述符。

6、请求连接

客户端程序使用一个未命名套接字连接到address指定的服务器套接字。

#include<sys/socket.h>
int connect(int socket, const struct sockaddr *address, size_t address_len);

image-20220830135651660

7、主机字节序和网络字节序

不同的处理器使用不同的字节序来表示整数(分为大端,小端模式,和处理器的设计有关),这样从套接字传递的端口号或地址只是简单的逐一个字节的复制,那不同的计算机可能得到的结果并不相同。

以下函数原型将主机字节序转变为网络字节序,使结果在任何计算机都是相同的。

#include <netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort); 
// host to network,long (htonl) 其他同理

Epoll 以内核事件描述符的方式检测IO

TCP/IP 笔记

IPv4头部结构TOS字段有四位,分别表示: 最小延时,最大吞吐量,最高可靠性和最小费用。

posted @ 2022-10-10 14:17  DawnHouse  阅读(35)  评论(0)    收藏  举报