套接字API - socket

套接字是网络编程中的基本概念,它提供了进程间通信的一种抽象。

作用

  socket函数的主要作用是创建一个新的套接字,该套接字可以用于网络通信。通过套接字,进程可以与其他进程(无论在同一台机器上还是不同机器上)进行数据传输。

函数原型

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

int socket(int domain, int type, int protocol);

参数说明

1. domain(地址族):指定了协议族,决定了套接字使用的地址类型。常见的协议族有:

  • AF_INET:IPv4协议族。
  • AF_INET6:IPv6协议族。
  • AF_UNIXAF_LOCAL:用于本地进程间通信的协议族。

2. type(套接字类型):指定了套接字的类型,决定了套接字的行为。常见的套接字类型有:

  • SOCK_STREAM:流式套接字,提供了面向连接的、可靠的、基于字节流的通信服务(如TCP)。
  • SOCK_DGRAM:数据报套接字,提供了无连接的、不可靠的、固定最大长度消息的服务(如UDP)。
  • SOCK_RAW:原始套接字,允许直接访问和操作底层协议的数据包(如IP、ICMP等)。

3. protocol(协议):通常设置为0,让系统自动选择适合该地址族和套接字类型的协议。但在创建原始套接字或需要指定特定协议时,需要显式设置该参数。

协议举例

1. 通常为0:在大多数情况下,protocol参数可以设置为0。当设置为0时,系统会自动根据domain(地址族)和type(套接字类型)参数选择默认的传输层协议。例如,在IPv4地址族(AF_INET)中创建一个流式套接字(SOCK_STREAM)时,如果protocol设置为0,则系统会自动选择TCP协议。

2. IPv4地址族(AF_INET

  • IPPROTO_TCP:传输控制协议(TCP),提供面向连接的、可靠的、基于字节流的传输服务。
  • IPPROTO_UDP:用户数据报协议(UDP),提供无连接的、不可靠的、基于数据报的传输服务。
  • IPPROTO_RAW:原始IP协议,允许直接访问和操作IP数据包。

3. IPv6地址族(AF_INET6

  • 与IPv4地址族类似,IPv6地址族也支持IPPROTO_TCPIPPROTO_UDP协议。
  • 同样,IPv6地址族也支持原始IP协议,但通常使用不同的常量来表示(例如,在某些系统中可能使用IPPROTO_RAWV6,但这不是一个标准常量,具体取决于系统实现)。

4. 本地通信地址族(AF_UNIXAF_LOCAL

  • 对于本地通信(同一台机器上的进程间通信),通常不使用IPPROTO_TCPIPPROTO_UDP等网络协议。
  • 本地通信套接字通常使用特定的协议标识,这些标识可能因系统而异,但通常不需要显式指定,因为系统默认为本地通信选择合适的协议。

返回值

  • 成功时返回套接字文件描述符,该描述符用于后续的网络操作(如bindlistenacceptconnectsendrecv等)。
  • 失败时返回-1,并设置errno以指示错误。
int m_sockHeartBeatFd;
m_sockHeartBeatFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_sockHeartBeatFd < 0) {
    QString strTmp = QString("heart socket create err sockHeartBeatFd = [%1][%2]").arg(QString::number(m_sockHeartBeatFd)).arg(strerror(errno));
    LOGE << strTmp;
    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值