socket创建类型

     |   0 评论   |   0 浏览

socket 创建类型

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

domain:
常用协议族如下:
AF_INET IPv4 协议
AF_INET6 IPv6 协议
AF_UNIX 本地进程间通信

type:
常用套接字类型如下:
SOCK_STREAM: 提供有序、可靠、双向、基于连接的字节流。这种类型的套接字使用 TCP 协议。
SOCK_DGRAM: 提供无连接的、不可靠的数据报服务。这种类型的套接字使用 UDP 协议。
SOCK_RAW: 提供原始网络协议访问。

protocol:
常用套接字协议如下:
PPROTO_TCP: TCP 传输协议
IPPROTO_UDP: UDP 传输协议
0: 使用默认协议(SOCK_STREAM 默认使用 TCP,SOCK_DGRAM 默认使用 UDP)。

  • 创建 socket(AF_INET, SOCK_RAW, IPPROTO_UDP) 后并绑定监听端口 33633,测试看实际并没有监听该端口,而是所有 UDP 报文均接收。

使用原始套接字 socket(AF_INET, SOCK_RAW, IPPROTO_UDP)创建后,无法直接绑定监听端口,因为原始套接字操作的是 IP 层的数据,而不是传输层的数据。原始套接字会接收到所有经过本机的 IP 数据报,而不仅仅是目标端口匹配的 UDP 包。

如果你只想监听特定端口的 UDP 包,可以使用普通的 UDP 套接字 socket(AF_INET, SOCK_DGRAM, 0),然后使用 bind 函数绑定监听端口。