SOCKET 2 2009-01-19
目录
- 名字 socket - 建立一个用于交流的端点 .SH 概要 .BR
- 描述
.BR socket ()
建立一个用于交流的端点并且返回一个描述符。
.PP
The
.I domain
参数指定一个通讯域名;选择的协议将会用于通讯。协议名在
.IR
中定义。 目前已知的格式包括: .TS tab(:); l l l. 名称:目的:手册页 T{ .BR AF_UNIX - 返回值
- 错误 .TP .B EACCES 不允许创建指定的 类型 和/或 指定的协议的套接字。 .TP .B EAFNOSUPPORT 工具不支持指定的地址。 .TP .B EINVAL 未知协议,或协议组不可用。 .TP .B EINVAL .
- 兼容性
- 注意
并不要求包含
.IR
,这个头文件在Linux下是不必须的。 可是一些历史上的 (BSD) 工具要求这个头文件,可移植程序很可能希望包含它。 4.x BSD下明显固定的协议组有 .BR PF_UNIX, .BR PF_INET, 等等,但是AF_UNIX等,它们是用于地址组的。可是BSD的man page保证“协议组一般等于地址组”,随后的标准在每个地方都使用了 AF_* 。 .I 文件头只在libc4以前是必须的。一些包,如util-linux,claim,是用于在所以Linux版本和库上可移植的。它们确实需要这个头文件。 .SH 例子 在 .BR getaddrinfo (3)。 中有一个使用 .BR socket () 的例子。 .SH - COLOPHON This page is part of release 3.27 of the Linux .I man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. 译者于2011-07-26翻译,于2013-02-08修订 译文与原文的版权协议一致 .SH
SOCKET
å忦è¦
æè¿°
è¿åå¼
é误
å¼å®¹æ§
注æ
ä¾å
åè§
COLOPHON
è·
åå
socket - 建ç«ä¸ä¸ªç¨äºäº¤æµç端ç¹
æ¦è¦
#include
<sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
æè¿°
socket() 建ç«ä¸ä¸ªç¨äºäº¤æµç端ç¹å¹¶ä¸è¿åä¸ä¸ªæè¿°ç¬¦ã
The domain åæ°æå®ä¸ä¸ªé讯ååï¼éæ©çåè®®å°ä¼ç¨äºé讯ãåè®®åå¨ <sys/socket.h> ä¸å®ä¹ã ç®åå·²ç¥çæ ¼å¼åæ¬ï¼

奿¥åéè¿ type, åæ°æ¥ç¡®å®éä¿¡è¯ä¹ãç®åå®ä¹çç±»åæï¼
|
SOCK_STREAM |
æä¾æåºçï¼å¯é çï¼ååçï¼åºäºåèæµçé讯ãå¯è½æ¯æå¸¦å¤ä¼ è¾ã | ||
|
SOCK_DGRAM |
æä¾æ°æ®æ¥ï¼ä¸é¢åè¿æ¥ç, ä¸å¯é çåºå®æå¤§é¿åº¦çä¿¡æ¯ï¼ã | ||
|
SOCK_SEQPACKET |
æä¾æåºçï¼å¯éçï¼ååçï¼åºäºåºå®æå¤§é¿åº¦çæ°æ®æ¥ä¼è¾è·¯å¾ï¼éè¦ä¸ä¸ªè¯»åæ´ä¸ªä¼´æè¾å¥ç³»ç»è°ç¨çåçç¨æ·ã | ||
|
SOCK_RAW |
æä¾æªå å·¥(raw)çç½ç»åè®®ééã | ||
|
SOCK_RDM |
æä¾å¯é çæ°æ®æ¥å±ï¼ä½æ¯ä¸ä¿è¯é¡ºåºã | ||
|
SOCK_PACKET |
åºå¼çï¼ä¸åºè¯¥å¨æ°çç¨åºä¸ä½¿ç¨ï¼åè packet(7)ã |
ä¸äºå¥æ¥åç±»åå¹¶æªè¢«ææçåè®®å®ç°ï¼ ä¾å¦ï¼ SOCK_SEQPACKET å¹¶ä¸è¢« AF_INET AF_INET å®ç°ã
ä» Linux 2.6.27 å¼å§ï¼ type åæ°å¯ä»¥æä¾å¶ä»çåè½ï¼ 注æä¸äºå¥æ¥å- ç±»åå¯è½åæ¬ä¸ä¸å¼çæä½ï¼ç¨æ¥ä¿®æ¹ socket(): çè¡ä¸ºã
|
SOCK_NONBLOCK |
设置 O_NONBLOCK çæ å¿äºæ°æå¼çæä»¶æè¿°ç¬¦ã éè¿è¿ä¸ªæ å¿å¯ä»¥ä¸ç¨è°ç¨ fcntl(2) æ¥è¾¾å°ç¸åçç»æã | ||
|
SOCK_CLOEXEC |
设置 close-on-exec (FD_CLOEXEC) çæ å¿äºæ°æå¼çæä»¶æè¿°ç¬¦ãåè§ open(2) ä¸å³äº O_CLOEXEC çæè¿°ï¼å 为ä¸äºåå è¿ä¸ªæ å¿å¾æç¨ã |
protocol æå®ä¸ä¸ªåè®®ç¨äºå¥æ¥åãæå®ä¸ä¸ªåè®®ç¨äºå¥æ¥å- ãä¸è¬æåµä¸ï¼å¨ç»å®çåè®®ä¸åªå许å¨ä¸ä¸ªå¥æ¥åä¸ä½¿ç¨ä¸ä¸ªåè®®ï¼ æ³¨æ protocol å¯ä»¥æå®ä¸ºæ°å0 ã 使¯ï¼å¯è½å- å¨çå¾å¤åè®®ï¼ä½æ¯å¨æ¬æåçåè®®å¿é¡»ä½¿ç¨ä¸ä¸ªãåè®®ç¨äºæå®é讯åçå°æ¹ç“é讯åå”ï¼åè protocols(5) ãåè getprotoent(3) ä¸å³äºå¦ä½æåè®®åç§°å- 符串ä¸åè®®ç¼å·è¿è¡æ å°ã
SOCK_STREAM ç±»åç奿¥å- æ¯ååç´æ¥æ°æ®æµçï¼å管éååç¸ä¼¼ãä»ä»¬ä¸å¯¹è®°å½æº¢åºæä¾ä¿æ¤ãä¸ä¸ªå¥æ¥å- æµå¨æ¥åæååºä»»ä½æ°æ®æ¶å¿é¡»å¤äº connected çç¶æãåå¶å®å¥æ¥åéè¿ connect(2) è°ç¨æ¥å»ºç«è¿æ¥ã 䏿¦è¿æ¥ï¼ æ°æ®å¯è½éè¿ read(2) å write(2) ç³»ç»è°ç¨æ¥ä¼ è¾ï¼ä¹æèæ¯ä¸åç send(2) å recv(2) ç³»ç»è°ç¨ãå½ä¼è¯ç»ææ¶ï¼å¯è½ä¼æ§è¡ close(2) 另夿°æ®å¯è½ä¹ç¨ send(2) å recv(2) æè¿°ä¸æ¥åã
SOCK_STREAM
ç±»åççéä¿¡åè®®åºç¡®ä¿ä¿¡æ¯ä¸ä¸¢å¤±ä¸éå¤ã妿ä¸åæåè®®ç¼å²çæ°æ®ä¸è½å¨åçæ¶é´åä¼è¾ï¼è¿æ¥ä¼è¢«è®¤ä¸ºè¶æ¶ãå½å¨å¥æ¥å-
ä¸å¯ç¨ SO_KEEPALIVE
ï¼åè®®ä¼ä»¥å¶ç¹å®æ¹å¼æ£æ¥å¦ä¸ç«¯æ¯å¦æ´»çãå½ä¸ä¸ªè¿ç¨æ¥åæåéäºä¸ä¸ªéè¯¯çæ°æ®æµï¼
ä¼äº§çå¹¶æ¥åä¸ä¸ª
SIGPIPE
ä¿¡å·ï¼å¯¹äºéåé»è®¤å¤çæ¤ä¿¡å·çè¿ç¨ï¼
å®å°ä¼éåºã
SOCK_SEQPACKET
奿¥åéç¨å
SOCK_STREAM
奿¥åç¸åçç³»ç»è°ç¨ãå¯ä¸ä¸åçæ¯ï¼
read(2)
ç³»ç»è°ç¨åªä¼è¿å请æ±çæ°æ®éï¼å¹¶å°ä½ä¸å°è¾¾ç任使°æ®æ°æ®å丢å¼ãæ-
¤å¤ææçæ¶æ¯è¾¹ççä¼ å¥çæ°æ®æ¥å°è¢«ä¿çã
SOCK_DGRAM å SOCK_RAW ç±»åç奿¥åæ¯æç¨ sendto(2) ç³»ç»è°ç¨æ¥åéæ°æ®æ¥ï¼æ°æ®æ¥é常æ¯ç¨ recvfrom(2), æ¥æ¥åçï¼è¿ä¸ªè°ç¨ä¼å¨ä¸ä¸ä¸ªæ°æ®æ¥ä¸åç¬çè¿ååéèçå°åã
SOCK_PACKET æ¯ä¸ä¸ªéçç奿¥åç±»åï¼ç¨æ¥ä»è®¾å¤é©±å¨ä¸æ¥ååå§æ°æ®ï¼å·²ç»è¢« packet(7) è°ç¨å代ã
fcntl(2) ç F_SETOWN æä½å¯ä»¥å¨å¸¦å¤æ°æ®å°è¾¾æ¶è®©è¿ç¨æè¿ç¨ç»ä¼æ¶å°ä¸ä¸ª SIGURG ä¿¡å·ï¼æèå¨ SOCK_STREAM ç±»åçè¿æ¥å¨è¢«ä¸ææå°æææ¶ï¼æ¶å° SIGPIPE ä¿¡å·ãè¿ä¸ªæä½ä¹å¯è½è¢«ç¨äºè®©è¿ç¨æè¿ç¨ç»éè¿ SIGIO. æ¥æ¶ I/O å I/O ä¸åæ¥çéç¥ãä½¿ç¨ F_SETOWN çåäºä½¿ç¨äº FIOSETOWN æ SIOCSPGRP åæ°ç ioctl(2) ç³»ç»è°ç¨ã
å½ç½ç»åå议模åååºä¸ä¸ªé误æåµçä¿¡å·ï¼ä¾å¦ï¼å¯¹IP使ç¨ICMPæ¶æ¯ï¼ï¼å¥æ¥å- å°ä¼è®¾ç½®ä¸pendingé误æ å¿ã坹奿¥å- æ¥ä¸å»çæä½å°ä¼è¿åpendingé误çé误代çã对äºä¸äºåè®®ï¼å¯è½ä¼ä¸ºæ¯ä¸ä¸ªæ¥å- æ¥å¯ç¨ä¸ä¸ªç¨äºååºè¯¦ç»é误信æ¯çé误åéï¼ åè§ ip(7) ä¸ç IP_RECVERR ã
奿¥åçæä½ç±å¥æ¥å级ç é项 æ¥æ§å¶ã è¿äºé项å®ä¹äº <sys/socket.h> ä¸ã setsockopt(2)å setsockopt(2) ç¨äºåå«ç¨äºè®¾ç½®å读åé项ã
è¿åå¼
æåæ¶ï¼ä¼è¿åæ°å¥æ¥åçæä»¶æè¿°ç¬¦ãé误æ¶ï¼è¿å -1 ï¼åæ¶ errno ä¼è¢«éå½è®¾ç½®ã
é误
|
EACCES |
ä¸å许å建æå®ç ç±»å å/æ æå®çåè®®ç奿¥åã |
EAFNOSUPPORT
å·¥å·ä¸æ¯ææå®çå°åã
|
EINVAL |
æªç¥åè®®ï¼æåè®®ç»ä¸å¯ç¨ã |
|||
|
EINVAL |
é误ç type æ å¿ã |
|||
|
EMFILE |
è¿ç¨æä»¶è¡¨æº¢åºã |
|||
|
ENFILE |
å·²ç»è¾¾å°ç³»ç»ä¸éçæä»¶æå¼æ°ã |
ENOBUFS æ ENOMEM
没æè¶³å¤çååï¼ç´å°æå¯ç¨çèµæºå¥æ¥åä¸è½è¢«å建ã
EPROTONOSUPPORT
åè®®ç±»åææå®çåè®®ä¸è¢«å½ååææ¯æã
å¶å®çé误å¯è½æ¯ç±å议模å产ççã
å¼å®¹æ§
4.4BSD, POSIX.1-2001.
SOCK_NONBLOCK å SOCK_CLOEXEC æ å¿æ¯ Linux ç¹æçã socket() appeared in 4.2BSD. åºç°äº 4.2BSD ãé常ï¼é BSD ç³»ç»ç BSD 奿¥åå±å鿝å¯ç§»æ¤çï¼åæ¬ System V çåç§ï¼ã
注æ
å¹¶ä¸è¦æ±åå« <sys/types.h> ï¼è¿ä¸ªå¤´æä»¶å¨Linux䏿¯ä¸å¿é¡»çã 坿¯ä¸äºåå²ä¸ç (BSD) å·¥å·è¦æ±è¿ä¸ªå¤´æä»¶ï¼å¯ç§»æ¤ç¨åºå¾å¯è½å¸æåå«å®ã 4.x BSD䏿æ¾åºå®çåè®®ç»æ PF_UNIXï¼ PF_INETï¼ ççï¼ä½æ¯AF_UNIXç- ï¼å®ä»¬æ¯ç¨äºå°åç»çã坿¯BSDçman pageä¿è¯âåè®®ç»ä¸è¬ç- äºå°åç»âï¼éåçæ å卿¯ä¸ªå°æ¹é½ä½¿ç¨äº AF_* ã
<sys/types.h> æä»¶å¤´åªå¨libc4以忝å¿é¡»çãä¸äºåï¼å¦util-linuxï¼claimï¼æ¯ç¨äºå¨æä»¥Linuxçæ¬ååºä¸å¯ç§»æ¤çãå®ä»¬ç¡®å®éè¦è¿ä¸ªå¤´æä»¶ã
ä¾å
å¨ getaddrinfo(3)ã 䏿ä¸ä¸ªä½¿ç¨ socket() çä¾åã
åè§
accept(2), bind(2), connect(2), fcntl(2), getpeername(2), getsockname(2), getsockopt(2), ioctl(2), listen(2), read(2), recv(2), select(2), send(2), shutdown(2), socketpair(2), write(2), getprotoent(3), ip(7), socket(7), tcp(7), udp(7), unix(7)
“An Introductory 4.3BSD Interprocess Communication Tutorialâ å¨ ä¸- 被éå°ã
“BSD Interprocess Communication Tutorial” å¨ UNIX Programmer’s Supplementary Documents Volume 1 ä¸è¢«éå°ã
COLOPHON
This page is part of release 3.27 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. è¯èäº2011-07-26ç¿»è¯ï¼äº2013-02-08修订 è¯æä¸åæççæåè®®ä¸è´
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh