SOCKET 7
目录
- NAME socket
- 总览
.B #include
.br .IB mysocket - 描述 本手册页介绍了 Linux 套接字的用户接口. 这个 BSD 兼容套接字是介于用 户进程与内核网络协议栈之间的统一接口, 各协议模块属于不同的 .I 协议族 ,如 .BR PF_INET
- 套接层函数 用户通过这些套接字函数发送和接收包, 以及其他套接字操作. 详细说明参看他们各自的手册页. .BR socket (2) 创建套接字, .PP .BR connect (2) 与远程套接字地址建立连接 .PP .BR bind (2) 把套接字和一个本地套接字地址绑定在一起(为套接字分配一个本地协议地址) .PP .BR listen (2) 通知套接字接受新的连接 .PP .BR accept (2) 为新的已完成连接获得新的描述字 .PP .BR socketpair (2) 返回两个连接的匿名套接字(仅在某些本地族中才有实现,如 .BR PF_UNIX
- 套接字选项 套接字选项可以用 .BR setsockopt (2) 来设置,用 .BR getsockopt (2) 读取所有套接字级别设为 .B SOL_SOCKET 的套接字的套接字选项: .TP .B SO_KEEPALIVE 允许在面向连接的套接字上发送 keep
- SIGNALS 当向一个已关闭(被本地或远程终端)的面向联接的套接字写入时, 将向该写入进程发送 .B SIGPIPE 信号,并返回 .B EPIPE . 如果写入命令声明了 .B MSG_NOSIGNAL 标识时, 不会发出此信号. .PP 如果与 .B FIOCSETOWN fcntl 或 .B SIOCSPGRP ioctl 一起请求,那么当发生 I/O 事件时发出 .B SIGIO 这样我们就可以在信号句柄里使用 .BR poll (2) 或 .BR select (2) 找出发生事件的套接字. 另一种选择(在 Linux 2.2 中)是用 .B F_SETSIG fcntl 设置一个实时信号: 实时信号的处理程序被调用时还会收到它的 .IR siginfo_t 的 .I si_fd 区域中的文件描述符. 更多信息参见 .BR fcntl (2) .PP 在某些环境中(例如:多个进程访问单个套接字), 引发 .B SIGIO 的东西在进程对信号作出反应时可能已经消失了. 如果这样的话, 进程应该再次等待, 因为 Linux 稍后会重发此信号. .
- SYSCTLS 可以通过目录 .B /proc/sys/net/core/* 下的文件或者用 .BR sysctl (2) 系统调用来访问内核套接字的网络系统控制(sysctl)信息. .TP .B rmem_default 指明套接字接收缓冲区的默认字节数. .TP .B rmem_max 指明套接字接收缓冲区的最大字节数, 用户可以通过使用 .B SO_RCVBUF 套接字选项来设置此值. .TP .B wmem_default 指明套接字发送缓冲区的默认字节数. .TP .B wmem_max 指明发送缓冲区的最大字节数,用户可以通过使用套接字的 .B SO_SNDBUF 选项来设置它的值. .TP .BR message_cost
- IOCTLS 以上的 IO 控制值可以通过 .BR ioctl (2) 来访问: .RS .nf .IB error
- 注意 Linux 假设有一半的发送/接收缓冲区是用来处理内核结构, 因此, 系统控制的缓冲区是网络可访问的缓冲区的两倍. .SH 缺陷 .B CONFIG_FILTER 没有介绍 .B SO_ATTACH_FILTER 和 .B SO_DETACH_FILTER 套接字选项. 在 libpcap 库有此接口的说明 .SH VERSIONS 版本 .B SO_BINDTODEVICE 在 Linux 2.0.30 中引入. .B SO_PASSCRED 是在 Linux 2.2 中引入的新选项. sysctl 是在 Linux 2.2. 中引入的新概念。 .SH 作者 本手册页由 Andi Kleen 编写. .PP .SH 又见 .BR socket (2), .BR ip (7), .BR setsockopt (2), .BR getsockopt (2), .BR packet (7), .BR ddp (7) .SH
- [中文版最新更新]
- 《中国linux论坛man手册页翻译计划》:
- 跋
SOCKET
NAMEæ»è§
æè¿°
奿¥å±å½æ°
奿¥åé项
SIGNALS
SYSCTLS
IOCTLS
注æ
缺é·
VERSIONS çæ¬
ä½è
åè§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·
NAME
socket - Linux 奿¥å
æ»è§
#include
<sys/socket.h>
mysocket = socket(int socket_family,
int socket_type, int
protocol);
æè¿°
æ¬æå页ä»ç»äº Linux 奿¥åçç¨æ·æ¥å£. è¿ä¸ª BSD å¼å®¹å¥æ¥åæ¯ä»äºç¨ æ·è¿ç¨ä¸åæ ¸ç½ç»åè®®æ ä¹é´çç»ä¸æ¥å£, åå议模åå±äºä¸åç åè®®æ ,å¦ PF_INET, PF_IPX, PF_PACKET å 奿¥åç±»å ,å¦ åèæµï¼SOCK_STREAMï¼ æ æ°æ®æ¥ï¼SOCK_DGRAMï¼. å³äºåè®®æå奿¥åç±»å请åè socket(2).
奿¥å±å½æ°
ç¨æ·éè¿è¿äºå¥æ¥å彿°åé忥æ¶å, 以åå¶ä»å¥æ¥åæä½. 详ç»è¯´æåçä»ä»¬åèªçæå页.
socket(2) åå»ºå¥æ¥åï¼
connect(2) ä¸è¿ç¨å¥æ¥åå°å建ç«è¿æ¥
bind(2) æå¥æ¥ååä¸ä¸ªæ¬å°å¥æ¥åå°åç»å®å¨ä¸èµ·ï¼ä¸ºå¥æ¥å- åéä¸ä¸ªæ¬å°åè®®å°åï¼
listen(2) éç¥å¥æ¥åæ¥åæ°çè¿æ¥
accept(2) 为æ°çå·²å®æè¿æ¥è·å¾æ°çæè¿°å
socketpair(2) è¿åä¸¤ä¸ªè¿æ¥çå¿å奿¥åï¼ä»å¨æäºæ¬å°æä¸ææå®ç°,å¦ PF_UNIXï¼
send(2),
sendto(2), å sendmsg(2) éè¿å¥æ¥ååéæ°æ®ï¼è recv(2), recvfrom(2), recvmsg(2) ä»å¥æ¥åæ¥æ¶æ°æ®. poll(2) å
select(2) ç徿°æ®å°æ¥æåå¤å¥½æ¥æ¶æ°æ®. 餿¤ä¹å¤, æ å I/O æä½å¦ write(2), writev(2), sendfile(2), read(2), å readv(2) ä¹å¯ç¨æ¥è¯»å¥ï¼æ¥æ¶ï¼åååºï¼åéï¼æ°æ®.
getsockname(2) ç¨äºè·å¾æ¬å°å¥æ¥åå°å
getpeername(2) ç¨äºè·å¾è¿ç«¯å¥æ¥åå°å. getsockopt(2) å setsockopt(2) ç¨äºè®¾ç½®æåå¾å¥æ¥åæåè®®é项. ioctl(2) ä¹å¯ä»¥ç¨æ¥è®¾ç½®æè¯»åä¸äºå¶ä»é项.
close(2) å³é奿¥å. shutdown(2) å³éå¨å工奿¥åè¿æ¥çä¸é¨å.
奿¥å䏿¯ææç´¢ï¼ä¹ä¸æ¯æè°ç¨ pread(2) æ pwrite(2) è¿è¡é 0 ä½ç½®çæä½. å¯ä»¥ç¨ fcntl(2). 设置 O_NONBLOCK æ å¿æ¥å®ç°å¯¹å¥æ¥åçéé»å¡ I/O æä½ O_NONBLOCK æ¯ä» accept ç»§æ¿æ¥çï¼ç¶å忥ææä¼é»å¡çæä½ä¼è¿å EAGAIN. connect(2) 卿¤æåµä¸è¿å EINPROGRESS é误. ç¨æ·å¯ä»¥éè¿ poll(2) æè select(2) çå¾åç§äºä»¶.

å¦å¤ä¸ä¸ªç poll/select æ¹æ³æ¯è®©åæ ¸ç¨ SIGIO ä¿¡å·æ¥éç¥åºç¨ç¨åº. è¦è¿ä¹ç¨çè¯ä½ å¿é¡»ç¨ fcntl(2) è®¾ç½®å¥æ¥åæä»¶æè¿°ç¬¦ç FASYNC æ å¿ï¼å¹¶ç¨ sigaction(2). ç» SIGIO ä¿¡å·è®¾ç½®ä¸ä¸ªçææä¿¡å·å¤ç奿.åçä¸é¢ç SIGNALS ç讨论.
奿¥åé项
奿¥åé项å¯ä»¥ç¨
setsockopt(2)
æ¥è®¾ç½®ï¼ç¨
getsockopt(2)
è¯»åææå¥æ¥å-
级å«è®¾ä¸º
SOL_SOCKET
ç奿¥åç奿¥åé项:
SO_KEEPALIVE
å许å¨é¢åè¿æ¥ç奿¥åä¸åé keep-alive æ¶æ¯çåè½.æ¯ä¸ä¸ªå¸å°æ´æ°.
SO_OOBINLINE
妿æå¼è¿ä¸ªé项ï¼å¸¦å¤ï¼Out-of-Bandï¼æ°æ®å¯ä»¥ç´æ¥æ¾å¥æ¥æ¶æ°æ®æµã å¦åï¼åªææ¥æ¶æ¶æå¼ MSG_OOB æ å¿, ææ¥æ¶å¸¦å¤æ°æ®.
SO_RCVLOWAT å SO_SNDLOWAT
声æå¨å¼å§ååè®® (SO_SNDLOWAT) ææ£å¨æ¥æ¶æ°æ®çç¨æ· (SO_RCVLOWAT). ä¼ éæ°æ®ä¹åç¼å²åºåçæå°åèæ°. å¨ Linux ä¸è¿ä¸¤ä¸ªå¼æ¯ä¸å¯æ¹åç, åºå®ä¸º 1 åè. å¯ä»¥ç¨ getsockopt ç¨æ¥è¯»åå®ä»¬çå¼; setsockopt æ»æ¯è¿å ENOPROTOOPT.
SO_RCVTIMEO å SO_SNDTIMEO
åéåæ¥æ¶æ¶çè¶æ¶è®¾å®, å¹¶å¨è¶æ¶æ¶æ¥é. å¨ Linux ä¸ç± åè®®æå®, ä¸è½è¢«è¯»å. å®ä»¬çåè½å¯ç¨ alarm(2) æè setitimer(2). æ¥æ¨¡æ.
SO_BSDCOMPAT
å许 BSD ç bug-to-bug å¼å®¹. è¿ä¸é¡¹åªè½å¨ UDP å议模åä¸ä½¿ç¨è ä¸ä»åå°è¦åæ¶. 妿å许çè¯, UDP 奿¥åæ¥æ¶å°ç ICMP é误å°ä¸ ä¼è¢«ä¼ éè³ç¨æ·ç¨åº. Linux 2.0 ä¸å¯¹äºåå§å¥æ¥åä¹å许 BSD bug-to-bug å¼å®¹ï¼æ¥å¤´éæºæ¹å,çç¥å¹¿ææ è¯ï¼,ä½å¨ Linux 2.2 ä¸- åæ¶äºè¿ä¸é¡¹. ä¿®æ¹ç¨æ·ç¨åºçæ¹å¼æ¯è¾å¥½.
SO_PASSCRED
å许æå³é SCM_CREDENTIALS æ§å¶æ¶æ¯çæ¥æ¶. æ´å¤ä¿¡æ¯åè§ unix(7).
SO_PEERCRED
è¿åè¿æ¥è³æ¤å¥æ¥åçå¤é¨è¿ç¨ç身份éªè¯. åªå¨ PF_UNIX 奿¥åä¸- æç¨.åè§ unix(7). åæ°ä¸º ucred ç»æ.åªå¨ getsockopt. 䏿æ.
SO_BINDTODEVICE
å°æ¤å¥æ¥åç»å®å°ä¸ä¸ªç¹å®ç设å¤ä¸, 妓eth0”, å为æå®çæ¥å£ååä¼ é. 妿åç§°æ¯ç©ºåç¬¦ä¸²ææ¤é¡¹é¿åº¦ä¸º 0, å奿¥å设å¤ç»å®è¢«åæ¶. è¿å»çé项æ¯ä¸ä¸ªåé¿ç空é¶ç»å°¾ç æ¥å£åç§°çå符串, 嶿大é¿åº¦ä¸º IFNAMSIZ. 妿ä¸ä¸ªå¥æ¥å被ç»å®è³ä¸æ¥å£, åªæç±è¿ä¸ªç¹å®æ¥å£æ¥æ¶çä¿¡æ¯åå¯ä»¥ç±æ¤å¥æ¥åå¤ç.
SO_DEBUG
åè®¸å¥æ¥åè°è¯.åªå¯¹æ CAP_NET_ADMIN åè½æææç¨æ·æ è¯ä¸º 0 çè¿ç¨ææ.
SO_REUSEADDR
表示å¨ä¸ä¸ª bind(2) è°ç¨ä¸- 对æä¾ç»å®çå°å使ç¨ç确认è§ååºè¯¥å许éå¤ä½¿ç¨æ¬å°å°å. å¯¹äº PF_INET 奿¥å, è¿è¡¨ç¤ºè¯¥å¥æ¥åå¯ä»¥ç»å®, é¤éå·²æä¸ä¸ªæ´»è·ç侦å¬å¥ æ¥å£ç»å®å°æ¤å°åä¸. 妿è¿ä¸ªä¾¦å¬å¥æ¥å- åä¸ä¸ªæå®ç«¯å£ç»å®ä¸º INADDR_ANY æ¶, å®å°±ä¸è½åç»å®å°ä»»ä½æ¬å°å°åçæ¤ç«¯å£.
SO_TYPE
ææ´æ°è¿å奿¥åç±»åï¼å¦ SOCK_STREAMï¼ åªè½éè¿ getsockopt 读å.
SO_DONTROUTE
ä¸éè¿ç½å³åé, åªè½åéç»ç´æ¥è¿æ¥ç主æº.å¯ä»¥éè¿å¨å¥æ¥åç send(2) æä½ä¸è®¾ç½® MSG_DONTROUTE æ å¿æ¥å®ç°ç¸åçææ. å¶å¼ä¸ºå¸å°åæ´æ°çæ è¯.
SO_BROADCAST
设置æè·åå¹¿ææ è¯. å½éæ©æ¤é项æ¶, æ°æ®æ¥å¥æ¥åæ¥æ¶å 广æ- å°ååéçæ°æ®å, å¹¶ä¸å¯ä»¥å广æå°ååéæ°æ®å. è¿ä¸ é项对äºé¢åæµç奿¥åæ æ.
SO_SNDBUF
设置æå¾å°å¥æ¥ååéç¼å²åºçæå¤§åèæ°. å¶é»è®¤å¼ç± wmem_default sysctl 设置,æå¤§å许å¼ç± wmem_max sysctl 设置.
SO_RCVBUF
设置æå¾å°å¥æ¥åæ¥æ¶ç¼å²åºçæå¤§åèæ°ãå¶é»è®¤å¼ç± rmem_default sysctl设置,æå¤§å许å¼ç± rmem_max sysctl 设置.
SO_LINGER
设置æè·å SO_LINGER é项çå¼. å¶åæ°ä¸º linger ç»æ.
struct linger {
|
int |
l_onoff; | ||
|
/* å»¶æ¶ç¶æï¼æå¼/å³éï¼ */ | |||
|
int |
l_linger; | ||
|
/* å»¶æ¶å¤é¿æ¶é´ */ |
};
妿鿩æ¤é项, close(2) æ shutdown(2) å°çå°ææå¥æ¥å- éæéçæ¶æ¯æååéæå°è¾¾å»¶è¿æ¶é´å æä¼è¿å. å¦å, è°ç¨å°ç«å³è¿å. è closing æä½å°å¨åå° è¿è¡. 妿奿¥åæ¯ exit(2), çä¸é¨åå³éæ¶, 宿»æ¯å¨åå°å»¶è¿è¿è¡ç.
SO_PRIORITY
è®¾ç½®å¨æ¤å¥æ¥ååéçææåçåè®®å®ä¹ä¼åæ. Linux éè¿è¿ä¸å¼æ¥æåç½ç»éå: æ ¹æ®æéè®¾å¤æéè§å, å·ææ´é«ä¼åæçåå¯ä»¥å被å¤ç.å¯¹äº ip(7), åæ¶ä¹è®¾ç½®äºè¾åºåç IP æå¡ç±»åï¼TOSï¼çå.
SO_ERROR
åå¾å¹¶æ¸é¤æªè§£å³ç奿¥åé误. åªæå¨ getsockopt. æ¶ææ. æ¯ä¸ä¸ªæ´æ°å¼.
SIGNALS
å½åä¸ä¸ªå·²å³éï¼è¢«æ¬å°æè¿ç¨ç»ç«¯ï¼çé¢åèæ¥ç奿¥åå奿¶, å°å该åå¥è¿ç¨åé SIGPIPE ä¿¡å·ï¼å¹¶è¿å EPIPE 妿åå¥å½ä»¤å£°æäº MSG_NOSIGNAL æ è¯æ¶, ä¸ä¼ååºæ¤ä¿¡å·.
å¦æä¸ FIOCSETOWN fcntl æ SIOCSPGRP ioctl ä¸èµ·è¯·æ±ï¼é£ä¹å½åç I/O äºä»¶æ¶ååº SIGIO è¿æ ·æä»¬å°±å¯ä»¥å¨ä¿¡å·å¥æéä½¿ç¨ poll(2) æ select(2) æ¾åºåçäºä»¶ç奿¥å. å¦ä¸ç§éæ©ï¼å¨ Linux 2.2 ä¸ï¼æ¯ç¨ F_SETSIG fcntl 设置ä¸ä¸ªå®æ¶ä¿¡å·: 宿¶ä¿¡å·çå¤çç¨åºè¢«è°ç¨æ¶è¿ä¼æ¶å°å®ç siginfo_t ç si_fd åºåä¸çæä»¶æè¿°ç¬¦. æ´å¤ä¿¡æ¯åè§ fcntl(2)
卿äºç¯å¢ä¸ï¼ä¾å¦:å¤ä¸ªè¿ç¨è®¿é®åä¸ªå¥æ¥åï¼, å¼å SIGIO çä¸è¥¿å¨è¿ç¨å¯¹ä¿¡å·ä½åºååºæ¶å¯è½å·²ç»æ¶å¤±äº. å¦æè¿æ ·çè¯, è¿ç¨åºè¯¥å次çå¾, å 为 Linux ç¨åä¼éåæ¤ä¿¡å·.
SYSCTLS
å¯ä»¥éè¿ç®å½
/proc/sys/net/core/*
ä¸çæä»¶æèç¨
sysctl(2)
ç³»ç»è°ç¨æ¥è®¿é®åæ ¸å¥æ¥åçç½ç»ç³»ç»æ§å¶ï¼sysctlï¼ä¿¡æ¯.
rmem_default
ææå¥æ¥åæ¥æ¶ç¼å²åºçé»è®¤åèæ°.
rmem_max
ææå¥æ¥åæ¥æ¶ç¼å²åºçæå¤§åèæ°, ç¨æ·å¯ä»¥éè¿ä½¿ç¨ SO_RCVBUF 奿¥å- é项æ¥è®¾ç½®æ¤å¼.
wmem_default
ææå¥æ¥ååéç¼å²åºçé»è®¤åèæ°.
wmem_max
ææåéç¼å²åºçæå¤§åèæ°ï¼ç¨æ·å¯ä»¥éè¿ä½¿ç¨å¥æ¥åç SO_SNDBUF é项æ¥è®¾ç½®å®çå¼.
message_cost å message_burst
设å®è®°å·å卿¡¶è¿æ»¤å¨, å¨å卿¡¶ä¸ä¿åä¸å®æ°éçå¤é¨ç½ç» äºä»¶å¯¼è´çè¦åæ¶æ¯.
netdev_max_backlog
å¨å¨å±è¾å¥éåä¸åçæå¤§æ°ç®.
optmem_max
æ¯ä¸ªå¥æ¥åç象 iovecs è¿æ ·çè¾å©æ°æ®åç¨æ·æ§å¶æ°æ®çæå¤§é¿åº¦.
IOCTLS
以ä¸ç IO æ§å¶å¼å¯ä»¥éè¿ ioctl(2) æ¥è®¿é®:
error = ioctl(ip_socket, ioctl_type, &value_result);
SIOCGSTAMP
è¿å timeval ç±»åçç»æï¼å¶ä¸åæ¬æåéç»ç¨æ·çæåä¸ä¸ªåæ¥æ¶æ¶çæ¶é´æ³ã è¢«ç¨æ¥æµé精确ç RTT ï¼round trip timeï¼ æ¶é´. struct timeval. ç»æè¯´æè¯·åè setitimer(2)
SIOCSPGRP
å¨å¼æ¥ IO æä½ç»ææèæ¥æ¶å°ç´§æ¥æ°æ®æ¶ï¼ç¨æ¥è®¾ç½®è¿ç¨æè¿ç¨ç»ï¼ åå®ï¼å®ä»¬ï¼åé SIGIO æè SIGURG ä¿¡å·, åæ°ä¸ºæå pid_t. ç±»åçæéãå¦æåæ°ä¸ºæ£ï¼ååéä¿¡å·å°ç¸åºçè¿ç¨ãå¦æåæ°ä¸º è´ï¼ååéä¿¡å·å°æ¤åæ°ç»å¯¹å¼ id æå±çè¿ç¨ç»çææè¿ç¨ã 妿宿²¡æ CAP_KILL åè½æèå®çææ UID 䏿¯ 0, è¿ç¨åªè½éæ©å®èªå·±æèªå·±çè¿ç¨ç»æ¥ æ¥æ¶ä¿¡å·.
FIOASYNC
æ¹å O_ASYNC æ å¿æ¥æå¼æèå³é奿¥åç弿¥ IO 模å¼ã弿- ¥IOæ¨¡å¼æçæ¯ï¼å½ æ°ç I/O äºä»¶åçæ¶ï¼å°ååº SIGIO ä¿¡å·æèç¨ F_SETSIG 设置çä¿¡å·.
åæ°ä¸ºæ´å½¢å¸å°é.
SIOCGPGRP
è·å¾å½åæ¥æ¶ SIGIO æè SIGURG ä¿¡å·çè¿ç¨æèè¿ç¨ç», å¦æä¸¤ä¸ªä¿¡å·é½æ²¡æè®¾ç½®, å为 0.
ææç
fcntl:
FIOCGETOWN
ä¸ IO æ§å¶ä¸ç SIOCGPGRP ç¸å.
FIOCSETOWN
ä¸ IO æ§å¶ä¸ç SIOCSPGRP ç¸å.
注æ
Linux å设æä¸åçåé/æ¥æ¶ç¼å²åºæ¯ç¨æ¥å¤çåæ ¸ç»æ, å æ¤, ç³»ç»æ§å¶çç¼å²åºæ¯ç½ç»å¯è®¿é®çç¼å²åºç两å.
缺é·
CONFIG_FILTER 没æä»ç» SO_ATTACH_FILTER å SO_DETACH_FILTER 奿¥åé项. å¨ libpcap åºææ¤æ¥å£ç说æ
VERSIONS çæ¬
SO_BINDTODEVICE å¨ Linux 2.0.30 ä¸å¼å¥. SO_PASSCRED æ¯å¨ Linux 2.2 ä¸- å¼å¥çæ°é项. sysctl æ¯å¨ Linux 2.2. ä¸å¼å¥çæ°æ¦å¿µã
ä½è
æ¬æåé¡µç± Andi Kleen ç¼å.
åè§
socket(2), ip(7), setsockopt(2), getsockopt(2), packet(7), ddp(7)
[䏿çç»´æ¤äºº]
liguoping <liguoping_11@sina.com>
[ä¸æçææ°æ´æ°]
2000/11/06
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
http://cmpp.linuxforum.net
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh