linux man page socketpair - ³×Æ®¿öÅ© Åë½ÅÀ» À§ÇÑ endpoint ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


socket

Åë½ÅÀ» À§ÇÑ Á¾Á¡(endpoint) À» »ý¼ºÇϰí, ÀÌ¿¡ ´ëÇÑ ÆÄÀÏÁöÁ¤ÀÚ¸¦ ¹ÝȯÇÑ´Ù.

»ç¿ë ¹ý

#include <sys/types.h> 
#include <sys/socket.h> 
 
int socket(int domain, int type, int protocol); 
 

¼³¸í

Åë½ÅÀ» À§ÇÑ Á¾Á¡(endpoint)¸¦ »ý¼ºÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ¼º°øÀûÀ¸·Î ÇÔ¼ö¸¦ ¼öÇàÇßÀ»°æ¿ì, Åë½Å Á¾Á¡À¸·Î »ç¿ëµÉ ÆÄÀÏ Áö½ÃÀÚ¸¦ ¸®ÅÏÇÑ´Ù.

socket ÇÔ¼ö¸¦ ÅëÇØ¼­ ¸¸µé¾îÁø ÆÄÀÏ ÁöÁ¤ ¹øÈ£´Â º¸Åë Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» µè±â À§Çؼ­ »ç¿ëµÊÀ¸·Î "µè±â ¼ÒÄÏ" À̶ó°í ºÒ¸®¿ì±âµµ ÇÑ´Ù.

¸Å°³ º¯¼ö

  • domain(µµ¸ÞÀÎ) Àº Åë½Å µµ¸ÞÀÎ(¿µ¿ª)À» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.
    || AF_UNIX || À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀ¸·Î IPC ¿ëÀ¸·Î »ç¿ëÇÑ´Ù.
    AF_INET TCP/IP ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ ÀÎÅÍ³Ý Åë½Å¿ëÀ¸·Î ÁÖ·Î »ç¿ëµÈ´Ù. AF_UNIX ¿Í ÇÔ²² °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÈ´Ù.
    AF_IPX ³ëº§ÀÇ IPX ÇÁ·ÎÅäÄÝÀÇ »ç¿ëÀ» À§Çؼ­ »ç¿ëÇÑ´Ù.
    AF_X25 X.25 ÇÁ·ÎÅäÄÝ
    AF_AX25 ¾Æ¸¶Ãß¾î ¶óµð¿À X.25

  • type Àº Åë½Å¿¡ »ç¿ëµÉ ÆÐŶÀÇ Å¸ÀÔÀ» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.
    SOCK_STREAM ¿¬°áÁöÇâÀÇ TCP ÇÁ·ÎÅäÄÝ
    SOCK_DGRAM µ¥ÀÌŸ±×·¥ ÁöÇâÀÇ UDP ÇÁ·ÎÅäÄÝ
    SOCK_RAW »ý¼ÒÄÏ È¤Àº ³¯¼ÒÄÏÀ¸·Î ºÒ¸®¿ì´Â Àú¼öÁØ socket Á¦¾î ÇÁ·ÎÅäÄÝ
  • protocol Àº ¼ÒÄÏÀ» »ç¿ëÇϱâ À§ÇÑ ÇÁ·ÎÅäÄÝ ÁöÁ¤À» À§ÇØ »ç¿ëÇÑ´Ù. type °ª°ú ÇÔ²² ½ÖÀ¸·Î »ç¿ëµÇ´Â °æ¿ì°¡ ¸¹´Ù.
    IPPROTO_ICMP ICMP(Internet Control Message Protocol)À» »ç¿ëÇÑ´Ù. SOCK_RAW domain¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
    IPPROTO_TCP ¿¬°á ÁöÇâ ÇÁ·ÎÅäÄÝ·Î SOCK_STREAM type °ú ÇÔ²² »ç¿ëµÈ´Ù.
    IPPROTO_UDP µ¥ÀÌÅÍ ±×·¥ ÁöÇâ ÇÁ·ÎÅäÄÝ·Î SOCK_DGRAM type °ú ÇÔ²² »ç¿ëµÈ´Ù.

¹Ýȯ°ª

¼º°øÇÒ°æ¿ì Á¤¼öÀÇ ÆÄÀÏ ÁöÁ¤ ¹øÈ£, ½ÇÆÐÇÒ°æ¿ì -1À» ¹ÝȯÇÑ´Ù.

¿¡·¯

EPROTONOSUPPORT ÁöÁ¤µÈ ÇÁ·ÎÅäÄÝ Å¸ÀÔ È¤Àº ÇÁ·ÎÅäÄÝÀÌ ÇØ´ç µµ¸ÞÀο¡¼­ Áö¿øµÇÁö ¾ÊÀ»°æ¿ì
ENFILE »õ·Î¿î ¼ÒÄϱ¸Á¶¸¦ ÁöÁ¤Çϱâ À§ÇØ Ä¿³Î ¸Þ¸ð¸®°¡ ºÎÁ·
EMFILE ÇÁ·Î¼¼½º ÆÄÀÏ Å×À̺íÀÌ overflow
EACCES ÁöÁ¤µÈ ŸÀÔÀÇ »ý¼ºµÈ ¼ÒÄÏÀ̳ª ÇÁ·ÎÅäÄÝ ±ÇÇÑÀÌ °ÅºÎµÇ¾úÀ»°æ¿ì, ´ëÇ¥ÀûÀ¸·Î RAW ¼ÒÄÏÀº root ±ÇÇÑÀÌ ÀÖ¾î¾ß »ý¼º°¡´ÉÇÏ´Ù.
EINVAL ¾Ë·ÁÁöÁö ¾ÊÀº ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇßÀ» °æ¿ì


¿¹Á¦

#include <sys/types.h> 
#include <sys/stat.h> 
#include <sys/socket.h> 
#include <unistd.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
 
#include <stdlib.h> 
#include <string.h> 
 
int main(int argc, char **argv) 
{ 
    int server_sockfd, client_sockfd; 
    int state, client_len; 
 
    struct sockaddr_in clientaddr, serveraddr, myaddr; 
 
 
    // internet ±â¹ÝÀÇ ½ºÆ®¸² ¼ÒÄÏÀ» ¸¸µéµµ·Ï ÇÑ´Ù.  
    // server_sockfd ´Â endpoint ¼ÒÄÏ(µè±â ¼ÒÄÏ) À¸·Î »ç¿ëµÈ´Ù.  
    if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
    { 
        perror("socket error : "); 
        exit(0); 
    } 
    bzero(&serveraddr, sizeof(serveraddr)); 
    serveraddr.sin_family = AF_INET; 
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serveraddr.sin_port = htons(12345); 
 
    // µè±â ¼ÒÄÏ¿¡ ¼ÒÄÏÆ¯¼º(ÁÖ¼Ò, Æ÷Æ®)¸¦ ¹­¾îÁØ´Ù.  
    state = bind(server_sockfd , (struct sockaddr *)&serveraddr,  
            sizeof(serveraddr)); 
    if (state == -1) 
    { 
        perror("bind error : "); 
        exit(0); 
    } 
 
    state = listen(server_sockfd, 5); 
    if (state == -1) 
    { 
        perror("listen error : "); 
        exit(0); 
    } 
 
    // ¸¸¾à µè±â ¼ÒÄÏÀ¸·Î Ŭ¶óÀÌ¾ðÆ® ¿¬°áÀÌ µé¾î¿Ô´Ù¸é,  
    // »õ·Î¿î Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ¼ÒÄÏ ÁöÁ¤¹øÈ£¸¦ ÇÒ´çÇÑ´Ù.  
    client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,  
                           &client_len); 
    if (client_sockfd == -1) 
    { 
        perror("Accept error : "); 
        exit(0); 
    } 
    // ¿©±â¿¡¼­ ºÎÅʹ Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ Åë½Å 
    // ..... 
    // ..... 
 
    close(client_sockfd); 
    return 1; 
} 
 


EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.