位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 socket()函数

提问人:刘团圆发布时间:2020-12-03

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

访问原始ATMPVC

-

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:指定的协议类型在该域中不支持。


继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部