SOCKET 2 2009-01-19

中文man手册

目录

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> ä¸å®ä¹ã ç®åå·²ç¥çæ ¼å¼åæ¬ï¼  

Image grohtml-3013514-1.png

奿¥åéè¿ 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