SOCKET 7

中文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) çå¾åç§äºä»¶.

 

Image grohtml-3015671-1.png

å¦å¤ä¸ä¸ªç 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