Skip to content
果冻虾仁 edited this page Jan 26, 2015 · 5 revisions

##函数原型

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol);

该函数在通信域domain中创建一个类型为type、使用协议protocol的套接字。 ##参数 ###domain

常用domain 描述
AF_UNIX Unix域套接字。同AF_LOCAL
AF_INET 使用IPv4协议的网络通信
AF_INET6 使用IPv6协议的网络通信

Unix域套接字,用于同一主机上的两个进程间的通信,在同一主机上IPC的时候,它比使用TCP连接通信效率更高。POSIX将其重命名为AF_LOCAL以消除它对应Unix操作系统的依赖。实际是一样的。

AF是Address Family(地址族)的缩写。另有PF(Protocol Family协议族)开头的值,并不常用。

POSIX规范指定socket函数的第一个参数使用PF_值,而套接字地址结构(比如sockddr_in)的地址结构使用AF_值。实际上AF_两者都在使用

###type

常用type 描述
SOCK_STREAM 字节流套接字(流式套接字)
SOCK_DGRAM 数据报套接字
SOCK_RAW 原始套接字
###protocal
通常设置为0。自动采用合理协议
###domain和type合法组合
AF_INET
--- :---:
SOCK_STREAM TCP
SOCK_DRAG UDP
SOCK_RAW IPv4
yes表示支持这一组合,但无相应协议名
##返回值
失败返回-1,并设置errno。成功返回一个描述符(类似文件描述符)。socket()和open()一样也返回最小的未使用的描述字,因此给定的描述符要么代表一个打开的文件,要么代表一个套接字

套接字可以用**close()函数来销毁。如果只想断开套接字连接,而不销毁它,可以用shutdown()**函数。

Linux环境编程API

C语言API包含部分标准C的API、POSIX标准的系统编程API(一些Linux独有的系统API会单独注明)。

头文件源码

大部分头文件源码在/usr/include目录下。

安装man手册

因为涉及到大量的POSIX编程。所以最好下载POSIX函数的man手册。

Ubuntu

apt-get install manpages-posix apt-get install manpages-posix-dev 

默认安装了manpages-dev,所以不装POSIX的man手册是可以查看绝大部分API的。
但是不装的话,有些API是不能看到的,比如posix_spawn函数。

CentOS

yum install man-pages.noarch 

关于目录

左侧的目录并非以函数为索引依据,主要是以系统的man手册页面为索引依据。
比如exec里面包含6个函数、pipe里面包含pipe()和pipe2()两个函数,但是它们都是属于一个man页面中。

Clone this wiki locally