- Notifications
You must be signed in to change notification settings - Fork 54
socket
果冻虾仁 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()**函数。
Talk is cheap, show me the code!
C语言API包含部分标准C的API、POSIX标准的系统编程API(一些Linux独有的系统API会单独注明)。
大部分头文件源码在/usr/include目录下。
因为涉及到大量的POSIX编程。所以最好下载POSIX函数的man手册。
apt-get install manpages-posix apt-get install manpages-posix-dev 默认安装了manpages-dev,所以不装POSIX的man手册是可以查看绝大部分API的。
但是不装的话,有些API是不能看到的,比如posix_spawn函数。
yum install man-pages.noarch 关于目录
左侧的目录并非以函数为索引依据,主要是以系统的man手册页面为索引依据。
比如exec里面包含6个函数、pipe里面包含pipe()和pipe2()两个函数,但是它们都是属于一个man页面中。