本文内容产生自智谱清言
头文件:
#include <sys/socket.h>
int socket(int domain,int type,int protocol);
它是在C语言中使用的一个系统调用函数,用于创建一个新的套接字。套接字是支持TCP/IP协议的网络通信的端点,可以看作是不同计算机进程间或同一计算机上不同进程间通信的一个虚拟端点。
下面是这个函数的参数说明:
-
domain
:指定协议族,它决定了套接字的地址类型。常见的协议族有:-
AF_INET
:这是最常用的协议族,用于IPv4网络协议。它使用32位的地址,通常以点分十进制的形式表示,例如192.168.1.1
。 -
AF_INET6
:用于IPv6网络协议。它使用128位的地址,通常以冒号分隔的十六进制形式表示,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334
。 -
AF_UNIX
:用于Unix域协议,它允许在同一台机器上的进程之间进行通信。Unix域套接字使用文件系统路径名作为地址。 -
AF_UNSPEC
:不指定协议族,通常用于地址信息的初始化,允许套接字与任何协议族兼容。 -
AF_NETLINK
:用于用户空间和内核空间之间的通信。 -
AF_PACKET
:用于直接访问网络层,通常用于创建原始套接字以接收或发送链路层帧。
-
这些协议族定义了套接字可以使用的地址格式和通信范围。根据你的应用程序需要连接的网络类型,你会选择合适的协议族。例如,如果你正在编写一个需要与互联网上的其他主机通信的应用程序,你会使用 AF_INET
或 AF_INET6
。如果你正在编写一个在同一台机器上的进程间进行通信的应用程序,你可能会使用 AF_UNIX
。
-
type
:指定套接字的类型,决定了数据传输的格式和方式。常见的套接字类型有:SOCK_STREAM
:提供一个有序、可靠、双向字节流,通常使用TCP协议。SOCK_DGRAM
:提供数据报文服务,是无连接的,不可靠的,通常使用UDP协议。SOCK_RAW
:提供原始网络协议访问。
-
protocol
:指定具体的协议类型。通常这个参数设置为0,表示默认协议,会根据domain
和type
选择合适的协议。
函数返回值:
- 成功时,返回一个非负整数,称为套接字描述符(socket descriptor),它是后续所有套接字操作的标识。
- 失败时,返回-1,并设置errno来指示错误。