socket

ëªì¹
     socket — íµì ì ìë í¬ì¸í¸ì ìì±

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc)

ìì
     <sys/types.h> <sys/socket.h> int socket(int domain, int type, int
     protocol)

í´ì¤
     socket() (ì)ë, íµì ì ìë í¬ì¸í¸ë¥¼ ìì±í´, 기ì ì를 ëë립ëë¤.

     domain íë¼ë¯¸í°ììë, íµì ì ííë íµì  ëë©ì¸ì ì§ì í©ëë¤.  ì´ê²ì ìí´, ì¬ì©íë
     íë¡í ì½ í¨ë°ë¦¬ê° ì íë©ëë¤.  ì´ íë¡í ì½ í¨ë°ë¦¬ë, ì¸í´ë£¨ë íì¼
     ⟨sys/socket.h⟩ ê·¸ë¦¬ê³  ì ìëê³  ììµëë¤. íì¬ í´ìëë í¬ë§·ì ì´íëë¡ìëë¤.

           PF_LOCAL        PF_UNIX ë¡ ë¶ë¦¬ê³  ìë, í¸ì¤í¸ë´ íë¡í ì½
           PF_UNIX         í¸ì¤í¸ë´ íë¡í ì½, ì¬ì©ì ì¥ë ¤ëì§ ìëë¤.
                           PF_LOCAL 를 ì¬ì©
           PF_INET         IPv4 íë¡í ì½
           PF_IMPLINK      ARPAnet IMP 주ì
           PF_PUP          BSP ì ê°ì PUP íë¡í ì½
           PF_CHAOS        MIT CHAOS íë¡í ì½
           PF_NS           XNS (Xerox Network Systems) íë¡í ì½
           PF_ISO          ISO íë¡í ì½
           PF_OSI          ê°ë°©í ìì¤íê° ìí¸ ì ì íë¡í ì½
                           (Open System Interconnection)
           PF_ECMA         ì ë½ ì ìê³ì°ê¸° ê³µìí
                           (European Computer Manufacturers)
           PF_DATAKIT      ë°ì´í° í· (Datakit) íë¡í ì½
           PF_CCITT        X. 25 를 ë®ì ITU-T íë¡í ì½
           PF_SNA          IBM SNA
           PF_DECnet       DECnet
           PF_DLI          DEC Direct / DLI (Data Link Interface) íë¡í ì½
           PF_LAT          LAT íë¡í ì½
           PF_HYLINK       NSC íì´í¼ ì±ë
           PF_APPLETALK    AppleTalk íë¡í ì½
           PF_ROUTE        ë´ë¶ routing protocol
           PF_LINK         ë§í¬ì¸µ ì¸í°íì´ì¤
           PF_XTP          XTP íë¡í ì½ (Xpress Transfer Protocol)
           PF_COIP         connection-oriented IP, ë³ëª ST II
           PF_CNT          Computer Network Technology ì¬ì íë¡í ì½
           PF_SIP          SIP íë¡í ì½ (Simple Internet Protocol)
           PF_IPX          Novell ì¬ IPX (Intenet Packet eXchange) íë¡í ì½
           PF_RTIP         RTIP í¨í·ì ìë³ë¡ ì¬ì©
           PF_PIP          PIP í¨í·ì ìë³ë¡ ì¬ì©
           PF_ISDN         íµí© ëì§í¸ íµì  ìë¹ì¤ë§ (ISDN)
           PF_KEY          ë´ë¶ì´ì  ê´ë¦¬ 기ë¥
           PF_INET6        IPv6 íë¡í ì½
           PF_NATM         ATM ì ë¤ì´í°ë¸ ì¡ì¸ì¤
           PF_ATM          ATM
           PF_NETGRAPH     Netgraph ìì¼

     ìì¼ìë, íµì ì ì¢ë¥ë¥¼ ì§ì íë¤ íì (ì´)ê° ììµëë¤. íì¬, ì ìëê³  ìë íìì
     ì´íëë¡ìëë¤.

           SOCK_STREAM     ì¤í¸ë¦¼í ìì¼
           SOCK_DGRAM      ë°ì´í° ê·¸ë¨í ìì¼
           SOCK_RAW        ì íë¡í ì½ ì¸í°íì´ì¤
           SOCK_RDM        ì ë¬ì ì ë¢°í  ì ìë í¨í·
           SOCK_SEQPACKET  ìì ì²¨ë¶ í¨í· ì¤í¸ë¦¼

     SOCK_STREAM íìì, ì°ìí, ì 뢰ì±ì´ ìë, ìë°©í¥ ì ì ë² ì´ì¤ì ë°ì´í¸ ì¤í¸ë¦¼ì
     ì ê³µí©ëë¤. ëìì¸ ë°ì´í° ì ì¡ ë©ì¹´ëì¦ì´ ìí¬í¸ëë ì¼ë ììµëë¤.  SOCK_DGRAM
     ìì¼ììë, ë°ì´í° ê·¸ë¨ (connectionlessë¡ ì 뢰ì±ì´ ìë, ìµëì¥ì´ ê³ ì ì
     (ì¼ë°ì ì¼ë¡ë ìë¤) ë©ì¸ì§)ê° ìí¬í¸ë©ëë¤.  SOCK_SEQPACKET ìì¼ì, ì°ìí,
     ì 뢰ì±ì´ ìë, ìë°©í¥ ì ì ë² ì´ì¤ì ìµëì¥ì´ ê³ ì ì ë°ì´í° ê·¸ë¨ì ì ì¡ì
     ì ê³µí©ëë¤.  ê° ì½ê¸° ìì¤í ì½ë¡ í¨í· ì 체를 ì½ì´ë¼ íìê° ììì§ë 모ë¦ëë¤.
     ì´ ê¸°ë¥ì íë¡í ì½ ê³ ì ì ê²ì¼ë¡, íì¬ë¡ìë PF_NS ê·¸ë¦¬ê³  ë°ì ì¤ì¥ëê³  ìì§
     ììµëë¤.  SOCK_RAW ìì¼ììë, ë´ë¶ ë¤í¸ìí¬ íë¡í ì½ê³¼ ì¸í°íì´ì¤ì ì¡ì¸ì¤ í  ì
     ììµëë¤.  ìí¼ ì ì  ë°ì ì¬ì©í  ì ìë¤ SOCK_RAW íì, ë° ê³íëê³  ìì§ë§ ìì§
     ì¤ì¥ëì´ ìì§ ìë¤ SOCK_RDM ì ëí´ìë, ì¬ê¸°ììë ì¤ëªíì§ ììµëë¤.

     protocol ê·¸ë¼, ìì¼ì¼ë¡ ì¬ì©íë í¹ì  íë¡í ì½ì ì§ì í©ëë¤. íµìì ê²½ì°ë, 1
     ê°ì íë¡í ì½ë§ì´ ì¡´ì¬í´, ì§ì í íë¡í ì½ í¨ë°ë¦¬ì í¹ì  ìì¼ íìì ìí¬í¸í©ëë¤.
     ê·¸ë¬ë, ë³µìì íë¡í ì½ì´ ì¡´ì¬íë ì¼ë ê°ë¥í©ëë¤. ì´ ê²½ì°ë, í¹ì  íë¡í ì½ì
     ì´ ë°©ë²ì¼ë¡ ì§ì í  íìê° ììµëë¤. ì¬ì©íë íë¡í ì½ ë²í¸ë, íµì ì ì¤ìíë¤ “íµì
     ëë©ì¸” ì ê³ ì í©ëë¤.  protocols(5) (ì)를 ì°¸ì¡°í´ ì£¼ì¸ì.

     íì SOCK_STREAM ì ìì¼ì, íì´íì ì ì¬í ì ì´ì¤ ë°ì´í¸ ì¤í¸ë¦¼ìëë¤.  ì¤í¸ë¦¼
     ìì¼ììë, ì ìì´ ëë ìí (ì¼)ë¡ íê³  ëì ë°ì´í°ë¥¼ ì¡ìì  í  íìê° ììµëë¤. ë¤ë¥¸
     ìì¼ìì ì ìì, connect(2) (ì)를 í¸ì¶í´ ìì±í  ì ììµëë¤. ì ìëë©´(ì), read(2)
     (ì)ê³¼ write(2) (ì)를 í¸ì¶íëì§, send(2) (ì)ê³¼ recv(2) ì ë³ì¢ì í¸ì¶í´
     ë°ì´í°ë¥¼ ì ì¡ í  ì ììµëë¤. (ì¸í°ë· í¨ë°ë¦¬ ë±, ì¼ë¶ì íë¡í ì½ í¨ë°ë¦¬ììë,
     “ì묵 ì ì” ê·¸ë ë¤ê³  íë ê´ëì´ ìí¬í¸ëê³  ììµëë¤. ì´ ì ìììë, sendto(2)
     (ì)를 í¸ì¶í´, ì ì ì¤í¼ë ì´ìì ì¤ì´ ë°ì´í°ë¥¼ ì¡ì í  ì ììµëë¤. ) ì¸ìì´
     ì¢ë£íë©´(ì), close(2) (ì)를 ì¤íí´ë ìê´íì§ ììµëë¤. ëìì¸ ë°ì´í°ë, send(2)
     ê·¸ë¦¬ê³  ì¤ëªëê³  ìëë¡(ë¯ì´) ì¡ì í´, recv(2) ê·¸ë¦¬ê³  ì¤ëªëê³
     ìëë¡(ë¯ì´) ìì í  ì ììµëë¤.

     SOCK_STREAM ì ì¤ì¥ì ì¬ì©íë íµì  íë¡í ì½ììë, ë°ì´í°ì ìì¤ì´ë ì¤ë³µì´ ìë
     ê²ì´ íë¡íìë©ëë¤. í¼ì´ íë¡í ì½ì ë²í¼ ê³µê°ì´ ìë ë°ì´í°ì ì¼ë¶ë¥¼ í©ë¦¬ì ì¸
     ìê°ë´ì ë¬¸ì  ìê³  ì ì¡ í  ì ìë ê²½ì°ë, ì ìì´ íìíë¤ê³  ë³´ì¬ í¸ì¶ì´ ìë¬ê°
     ëì´, -1 íì§ë§ ëëë ¤ì ¸ ê¸ë¡ë² ë³ì errno ì ETIMEDOUT íì§ë§ ì¤ì ë©ëë¤. ê·¸
     ì¸ì ëìì´ ìë ê²½ì°, íë¡í ì½ì ì½ 1 ë¶ ë§ë¤ ì ì¡ì ê°ì í´, ìì¼ì “ì ì” (ì)를
     ììì ì ì§í©ëë¤. ì¼ì ê¸°ê° (ì를 ë¤ë©´ 5 ë¶ê°) ìì´ë ì ìì¼ë¡ ìëµì´ ìë ê²½ì°ë
     ìë¬ê° ë©ëë¤.  íìí ì¤í¸ë¦¼ë¡ íë¡ì¸ì¤ê° ì¡ì íë©´(ì), SIGPIPE ìê·¸ëì´
     ë°ìí©ëë¤.  ì´ ê²½ì°, ìê·¸ëì ì²ë¦¬íì§ ìë íë¡ì¸ì¤ë ì¢ë£í©ëë¤.

     SOCK_SEQPACKET ìì¼ì, SOCK_STREAM ìì¼ê³¼ ê±°ì ê°ì ìì¤í ì½ìëë¤.  read(2)
     (ì)를 í¸ì¶í´ë, ì구ë ìì ë°ì´í° ë°ì ëëë ¤ì§ê³  ë, ìì  í¨í·ì ë머ì§ì ë¶ë¶ì
     ë°©íëë ì ë§ì´ ë¤ë¦ëë¤.

     SOCK_DGRAM ìì¼ê³¼ SOCK_RAW ìì¼ììë, send(2) ì í¸ì¶ë¡ ì§ì ë íµì  ìëìê²
     ë°ì´í° ê·¸ë¨ì ì¡ì í  ì ììµëë¤.  ì¼ë°ì ì¼ë¡ ë°ì´í° ê·¸ë¨ì, ë¤ìì ë°ì´í°
     ê·¸ë¨ì 주ì를 ëëë¦°ë¤ recvfrom(2) ê·¸ë¦¬ê³  ìì ë©ëë¤.

     fcntl(2) (ì)를 í¸ì¶íë©´(ì), ëìì¸ ë°ì´í°ë¥¼ ìì íì ê²½ì°ì SIGURG ìê·¸ëì
     ìì íë íë¡ì¸ì¤ 그룹ì ì§ì í  ì ììµëë¤.  ë¹ë¸ë¡í¹ ìì¶ë ¥, ë° ìì¶ë ¥
     ì´ë²¤í¸ì ë¹ë기 íµì§ë, SIGIO ê·¸ë¦¬ê³  ì í¨íê² í  ì ììµëë¤.

     ìì¼ì ì¤í¼ë ì´ìì, ìì¼ ë 벨ì ìµì ê·¸ë¦¬ê³  ì ì´ë©ëë¤. ì´ ìµìì, íì¼
     ⟨sys/socket.h⟩ ì ì ìëê³  ììµëë¤.  setsockopt(2) (ì)ë ìµìì ì¤ì ì,
     getsockopt(2) (ì)ë ìµìì ììì ì¬ì©í©ëë¤.

ë°íê°
     ìë¬ê° ë°ìíë©´(ì) -1 ê° ëëë ¤ì§ëë¤. ìë¬ê° ë°ìíì§ ììë ê²½ì°ë, ìì¼ì 참조íë
     기ì ìê° ëëë ¤ì§ëë¤.

ìë¬
     ì´íì ê°ì ê²½ì°, socket() ì í¸ì¶ì ìë¬ê° ë©ëë¤.

     [EPROTONOSUPPORT]  íë¡í ì½ íìì´ë ì§ì ë íë¡í ì½ì´ ëë©ì¸ì¼ë¡ ìí¬í¸ëê³  ìì§
                        ììµëë¤.

     [EMFILE]           íë¡ì¸ì¤ë§ë¤ì 기ì ì íì´ë¸ì´ ë§ë°°ìëë¤.

     [ENFILE]           ìì¤í íì¼ íì´ë¸ì´ ë§ë°°ìëë¤.

     [EACCES]           ì§ì ë íìì´ë íë¡í ì½ì ìì¼ì ìì±íë ê¶íì´ ê±°ë¶ëììµëë¤.

     [ENOBUFS]          ë²í¼ ê³µê°ì´ ë¶ì¡±í©ëë¤.  충ë¶í 리ìì¤ê° í´ë°©ë
                        ëê¹ì§ ìì¼ì ìì±í  ì ììµëë¤.

ê´ë ¨ í목
     accept(2), bind(2), connect(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), netgraph(4),
     protocols(5) "An Introductory 4.3 BSD Interprocess Communication
     Tutorial", PS1, 7.  "BSD Interprocess Communication Tutorial", PS1, 8.

ìì¬
     socket() í¨ì í¸ì¶ì 4.2BSD ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.