内核会为新的socket分配一个套接字实例(struct socket)。 这个实例中包含了操作这个socket所需要的所有方法,例如数据发送、接收、状态查询等。 对于AF_INET和SOCK_STREAM,这通常意味着创建一个TCP套接字。 返回文件描述符: 最后,内核会将这个套接字实例与一个文件描述符关联起来,并返回给用户空间。 文件描述符是一...
很明显,内核的第一步应该是通过 AF_INET、SOCK_STREAM 以及最后一个参数 0 定位到需要创建一个 TCP 的 socket,如下图绿线所示: 我们跟踪源码调用 socket(AF_INET, SOCK_STREAM, 0) |->sys_socket 进入系统调用|->sock_create |->__sock_create 进一步分析__sock_create 的代码判断: const struct net_pro...
sock = socket(AF_INET,SOCK_STREAM,0); return sock; } 1. 2. 3. 4. 5. 6. 这里用到sys/socket.h头文件中的socket()函数 AF_INET宏也定义在sys/socket.h头文件里,代表IPv4地址,AF代表了Address Family地址族。类似的还有AF_INET6(IPv6地址)等 SOCK_STREAM这个宏也定义在sys/socket.h头文件里,它...
#include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<fcntl.h> #include<unistd.h> intcreate_socket(uint16_tport) { intsock; structsockaddr_inaddr; // create socket sock = socket(AF_INET,SOCK_STREAM,0); if(sock <0) { perror("socket"); exit(EXIT_FAILURE)...
int socket(int domain, int type, int protocol); “` 其中,`domain`指定套接字的域,可以是`AF_INET`代表IPv4地址域,也可以是`AF_INET6`代表IPv6地址域。`type`指定套接字的类型,可以是`SOCK_STREAM`或者`SOCK_DGRAM`。`protocol`通常为0,表示使用默认协议。
常见的socket有3种类型如下。 (1)流式套接字(SOCK_STREAM) 流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的可靠性和顺序性。 (2)数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错...
1. 生成socket时设置 socket函数创建socket默认是阻塞的,也可以增加选项将socket设置为非阻塞的: 代码语言:javascript 复制 int s = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP); 2. 使用fcntl设置 将socket设置为非阻塞的 代码语言:javascript ...
首先,通过调用socket()函数创建了一个Socket对象,并指定了协议族(AF_INET)和Socket类型(SOCK_STREAM)。然后,通过bind()函数将Socket绑定到指定的IP地址和端口号。接下来,通过listen()函数开始监听连接请求。在服务器的主循环中,通过accept()函数接受连接请求,并使用read()和write()函数接收和发送数据。
socket(AF_INET,SOCK_STREAM,0)|->sys_socket 进入系统调用|->sock_create|->__sock_create 进一步分析__sock_create的代码判断: 代码语言:javascript 复制 conststruct net_proto_family*pf;// RCU(Read-Copy Update)是linux的一种内核同步方法,在此不阐述// family=INETpf=rcu_dereference(net_families[fami...
1. 生成socket时设置 socket函数创建socket默认是阻塞的,也可以增加选项将socket设置为非阻塞的: ints=socket(AF_INET,SOCK_STREAM|SOCK_NONBLOCK,IPPROTO_TCP); 2. 使用fcntl设置 将socket设置为非阻塞的 if((nFlags=fcntl(nSock,F_GETFL,0))<0)return0;nFlags=nFlags | O_NONBLOCK;if(fcntl(nSock,F_SE...