subscribe linux-man
I will format it later
In memories of HIZUKI AYAKA ,the angel!
月
吹智也
SOCKETï¼?2ï¼?
å??å?
socket - 建ç«?ä¸?个ç?¨äº?交æµ?ç??端ç?¹
��
#include <sys/type.h> /*å??è§?注æ??*/
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
æ??è¿°
socket() 建ç«?ä¸?个ç?¨äº?交æµ?ç??端ç?¹å¹¶ä¸?è¿?å??ä¸?个æ??è¿°ã??
domain å??æ?°æ??å®?ä¸?个é??讯å??å??ï¼?é??æ?©ç??å??è®®å°?ä¼?ç?¨äº?é??讯ã??å??è®®å??å?¨ <sys/socket.h> ä¸å®?ä¹?ã?? ç?®å??å·²ç?¥ç??æ ¼å¼?å??æ?¬ï¼?
å??称 ç?®ç?? æ??å??页
AF_UNIX, AF_LOCAL æ?¬å?°é??讯 unix(7)
AF_INET IPv4 ç½?ç»?å??è®® ip(7)
AF_INET6 IPv6 ç½?ç»?å??è®® ipv6(7)
AF_IPX IPX - Novell å??è®®
AF_NETLINK Kernel user interface device netlink(7)
AF_X25 ITU-T X.25 / ISO-8208 å??è®® x25(7)
AF_AX25 Amateur radio AX.25 å??è®®
AF_ATMPVC Access to raw ATM PVCs
AF_APPLETALK Appletalk ddp(7)
AF_PACKET Low level packet interface packet(7)
å¥?æ?¥å? é??è¿? type å??æ?°æ?¥ç¡®å®?é??ä¿¡è¯ä¹?ã??ç?®å??å®?ä¹?ç??ç±»å??æ??ï¼?
SOCK_STREAM æ??ä¾?æ??åº?ç??ï¼?å?¯é? ç??ï¼?å??å??ç??ï¼?å?ºäº?å?è??æµ?ç??é??讯ã??å?¯è?½æ?¯æ??å¤?ä¿¡é??ä¼ è¾?ã??
SOCK_DGRAM æ??ä¾?æ?°æ?®æ?¥ï¼?ä¸?é?¢å??è¿?æ?¥ç??, ä¸?å?¯é? ç??å?ºå®?æ??大é?¿åº¦ç??ä¿¡æ?¯ï¼?
SOCK_SEQPACKET æ??ä¾?æ??åº?ç??ï¼?å?¯é? ç??ï¼?å??å??ç??ï¼?å?ºäº?å?ºå®?æ??大é?¿åº¦ç??æ?°æ?®æ?¥ä¼ è¾?è·¯å¾?ï¼?é??è¦?ä¸?个读å??æ?´ä¸ªä¼´æ??è¾?å?¥ç³»ç»?è°?ç?¨ç??å??ç??ç?¨æ?·ã??
SOCK_RAW æ??ä¾?æ?ªå? å·¥(raw)ç??ç½?ç»?å??è®®é??é??ã??
SOCK_RDM æ??ä¾?å?¯é? ç??æ?°æ?®æ?¥å±?ï¼?ä½?æ?¯ä¸?ä¿?è¯?顺åº?ã??
SOCK_PACKET åº?å¼?ç??ï¼?ä¸?åº?该å?¨æ?°ç??ç¨?åº?ä¸ä½¿ç?¨ï¼?å??è??packet(7)ã??
ä¸?äº?å¥?æ?¥å?ç±»å??并æ?ªè¢«æ??æ??ç??å??è®®å®?ç?°ï¼? ä¾?å¦?ï¼?SOCK_SEQPACKET 并ä¸?被 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 ã??
ä½?æ?¯ï¼? å?¯è?½å?å?¨ç??å¾?å¤?å??è®®ï¼? ä½?æ?¯å?¨æ?¬æ??å??ç??å??è®®å¿?须使ç?¨ä¸?个ã??å??è®®ç?¨äº?æ??å®?é??讯å??ç??å?°æ?¹ç??â??é??讯å??å??â??ï¼? å??è?? protocol(5) ã??
å??è?? getprotoent(3) ä¸å?³äº?å¦?ä½?æ??å??è®®å??称å?符串ä¸?å??è®®ç¼?å?·è¿?è¡?æ? å°?ã??
SOCK_STREAM ç±»å??ç??å¥?æ?¥å?æ?¯å??å??ç?´æ?¥æµ?ï¼? å??管é??å??å??ç?¸ä¼¼ã?? ä»?们ä¸?对记å½?溢å?ºæ??ä¾?ä¿?æ?¤ã?? ä¸?个å¥?æ?¥å?æµ?å?¨æ?¥å??æ??å??å?ºä»»ä½?æ?°æ?®æ?¶å¿?é¡»å¤?äº?å·²è¿?æ?¥ç??ç?¶æ??ã??å??å?¶å®?å¥?æ?¥å?é??è¿?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) å?? getsockopt(2) ç?¨äº?å??å?«ç?¨äº?设置å??读å??é??项ã??
è¿?å??å?¼
æ??å??æ?¶ï¼?ä¼?è¿?å??æ?°å¥?æ?¥å?ç??æ??件æ??述符ã??é??误æ?¶ï¼?è¿?å?? -1 ï¼?å??æ?¶ errno ä¼?被é??å½?设置ã??
é??误
EACCES ä¸?å??许å??建æ??å®?ç?? ç±»å?? å??/æ?? æ??å®?ç??å??è®®ç??å¥?æ?¥å?ã??
EAFNOSUPPORT
å·¥å?·ä¸?æ?¯æ??æ??å®?ç??å?°å??ã??
EINVAL æ?ªç?¥å??è®®ï¼?æ??å??è®®ç»?ä¸?å?¯ç?¨ã??
EINVAL é??误ç?? type æ ?å¿?ã??
EMFILE è¿?ç¨?æ??件表溢å?ºã??
ENFILE å·²ç»?è¾¾å?°ç³»ç»?ä¸?é??ç??æ??件æ??å¼?æ?°ã??
ENOBUFS æ?? ENOMEM
没æ??足å¤?ç??å??å?ï¼?ç?´å?°æ??å?¯ç?¨ç??èµ?æº?å¥?æ?¥å?ä¸?è?½è¢«å??建ã??
EPROTONOSUPPORT
å??议类å??æ??æ??å®?ç??å??è®®ä¸?被å½?å??å??æ??æ?¯æ??ã??
å?¶å®?ç??é??误å?¯è?½æ?¯ç?±å??议模å??产ç??ç??ã??
�容�
4.4BSD, POSIX.1-2001.
SOCK_NONBLOCK ä¸? SOCK_CLOEXEC æ ?å¿?æ?¯ Linux ç?¹æ??ç??ã??
socket() å?ºç?°äº? 4.2BSD ã??é??常ï¼?é?? BSD ç³»ç»?ç?? BSD å¥?æ?¥å?å±?å??é??æ?¯å?¯ç§»æ¤?ç??ï¼?å??æ?¬ System V ç??å??ç§?ï¼?ã??
注æ??
POSIX.1-2001 并ä¸?è¦?æ±?å??å?« <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) ä¸æ??ä¸?个使ç?¨å¥?æ?¥å?ç??ä¾?å?ã??
å??è§?
accept(2), bind(2), connect(2), fcntl(2), getpeername(2), getsockname(2), getsockopt(2), ioctl(2), lisâ??
ten(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â?? å?¨ UNIX Programmer's Supplementary Documents Volume 1 ä¸è¢«é??å?°ã??
â??BSD Interprocess Communication Tutorialâ?? å?¨ UNIX Programmer's Supplementary Documents Volume 1 ä¸è¢«é??å?°