C语言 socket()函数
socketO函数用于创建通信的套接字,并返回该套接字的文件描述符。其原型如下:
int socket(int domain, int type. int protocol);
其中:
(1)参数domain指定了通信域,用于选择通信协议族,其取值情况如表所示。
名称 | 含义 | 挤注 |
PF—UNI乂. PF_LOCAL | 本地通信 | “man7UNI乂"可以获得具体帮助信息 |
PF_INET | IPv4协议 | “man6ip”可以获得具体帮助信息 |
PF_INET6 | IPv6协议 | - |
PF_IP乂 | Novell公司的IP乂协议 | - |
PF_NETUNK | 与内核间的接口 | “man 7 netlink”可以获得具体帮助信息 |
PF _乂 25 | ITU-T 乂.25 / ISO-8208 | “man 7 x25” 可以获得具体帮助信息 |
PF_AX25 | 无线A乂.25协议 | - |
PF_ATAAPVC | 访问原始ATM的PVC | - |
PF_APPLETALK | 苹果公司的Appletdlk协议 | "man 7 ddp"可以获得具体帮助信息 |
PF_PACKET | 底层包接口 | “man 7 packet”获得具体帮助信息 |
(2)参数type用于指定套接字的类型。套接字类型除了前面提到的流套接字、数据报套接字及原始套接字外,还有其他的几种类型,如表所示。
套接字类锻 | 说明 |
SOCK _ STREAM | 提供有序、可靠、双向及基于连接的字节流。支持带外传输机制 |
SOCK _ DGRAM | 支持数据报 |
SOCK _ SEQPACKET | 提供有序、可靠、双向基于连接的数据报通信 |
SOCK _ RAW | 提供对原始网络协议的访问 |
SOCK _ RDM | 提供可靠的数据报层,但是不保证有序性 |
SOCK_PACKET | 该参数已经废除 |
流套接字(SOCK_STREAM )与管道类似,是一种全双工的比特流。流套接字在发送或接收数据前必须处于连接状态。实现流套接字的通信协议保证了传输的数据不会丟失。
(3)参数protocol用于指定套接字使用的通信协议。正常情况下,对于给定的协议族,只有单一的协议支持特定的套接字类型。这时,只要将protocol参数设置为0即可。
socket()函数常见的错误信息:
© EACCES:创建指定类型的套接字失败。
© EAFNOSUPPORT: 不支持指定的地址族。
© EINVAL:未知协议或未知的协议族。
© EMFILE:进程文件表溢出。
© ENFILE:达到打开文件的系统限制。
© ENOBUFS或ENOMEM: 内存不足。
© EPROTONOSUPPORT:指定的协议类型在该域中不支持。
点击加载更多评论>>