Linux man : listen - ¼ÒÄÏÀÇ ¿¬°áÀ» À§ÇÑ ´ë±â¿­À» ¸¸µç´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=listen">listen</a>(2)

1장. listen(2)

¼ÒÄÏÀÇ ¿¬°á ´ë±â¿­À» ¸¸µç´Ù.


1.1. »ç¿ë¹ý

#include <sys/socket.h>

int listen(int s, int backlog);
		


1.2. ¼³¸í

¼­¹öÃø ÇÁ·Î±×·¥Àº socket(2)ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ µè±â¼ÒÄÏÀ» ¸¸µé°Ô µÈ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀº µè±â¼ÒÄÏÀ» ÅëÇØ¼­ ÀÌ·ç¾îÁö´Âµ¥ Ŭ¶óÀÌ¾ðÆ®´Â connect(2)¸¦ È£ÃâÇØ¼­ ¼­¹ö¿¡ ¿¬°áÀ» ½ÃµµÇϰí, 3¹ø ¾Ç¼ö±â¹ýÀÌ ¼º°øÇÏ¸é ¼­¹ö¿Í ¿ÏÀüÇÑ ¿¬°áÀÌ ¸¸µé¾î Áø´Ù.

¸¸µé¾îÁø ¿¬°áÀº queue¿¡ µé¾î°¡°Ô µÇ°í ¼­¹öÃø¿¡¼­ accept(2)¸¦ È£ÃâÇÏ¸é ºñ·Î¼­ ¼­¹ö´Â ¿¬°á¼ÒÄÏÀ» ¸¸µé°í ¸¸µé¾îÁø ¿¬°á¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇÏ°Ô µÈ´Ù.

listen(2) ½Ã½ºÅÛÈ£ÃâÀº SOCK_STREAM°ú SOCK_SEQPACKET¿¡¸¸ »ç¿ëµÈ´Ù.

a´Â socket(2)¿¡ ÀÇÇØ¼­ ¸¸µé¾îÁø µè±â ¼ÒÄÏÀÌ´Ù. backlog´Â ¿¬°áÀÌ ´ë±âÇÒ ¼ö Àִ ťÀÇ °¹¼öÀÌ´Ù. ¸¸¾à backlog¿¡ ¿¬°áÀÌ ¸ðµÎ Âù »óÅ¿¡¼­ »õ·Î¿î ¿¬°áÀ» ½ÃµµÇÑ´Ù¸é, Ŭ¶óÀÌ¾ðÆ®´Â ECONNREFUSED ¿¡·¯¸¦ ¹Þ°ÔµÉ °ÍÀÌ´Ù. ¸¸¾à ÀçÀü¼ÛÀ» Áö¿øÇÏ´Â ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù¸é ¿¡·¯¸¦ ¹«½ÃÇÏ°í ¼º°øÇÒ ¶§±îÁö Àç½Ãµµ¸¦ ÇÏ°Ô µÈ´Ù.


1.3. ¹Ýȯ°ª

¼º°øÇϸé 0À» ¸®ÅÏÇÏ°í ½ÇÆÐÇßÀ» °æ¿ì -1À» ¸®ÅÏÇϰí errno ¸¦ ¼³Á¤ÇÑ´Ù.


1.4. ¿¡·¯

EADDRINUSE

´Ù¸¥ ¼ÒÄÏÀÌ µ¿ÀÏÇÑ Æ÷Æ®¸¦ »ç¿ëÇϰí ÀÖ´Ù.

EBADF

s°¡ À߸øµÈ ¼ÒÄÏÁöÁ¤ÀÚÀÌ´Ù.

EOPNOTSUP

¼ÒÄÏÀÌ listenÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

ENOTSOCK

s°¡ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.


1.5. ¿¹Á¦

#include <sys/socket.h>
#include <sys/stat.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    int server_sockfd, client_sockfd;
    int client_len, n;
    char buf[80];
    struct sockaddr_in clientaddr, serveraddr;

    client_len = sizeof(clientaddr);

    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(atoi(argv[1]));

    bind (server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
    listen(server_sockfd, 5);

    while(1)
    {
        memset(buf, 0x00, 80);
        client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,
                            &client_len);

        if ((n = read(client_sockfd, buf, 80)) <= 0)
        {
            close(client_sockfd);
            continue;
        }
        if (write(client_sockfd, buf, 80) <=0)
        {
            perror("write error : ");
            close(client_sockfd);
        }
        close(client_sockfd);
    }
}
		
À§ ÇÁ·Î±×·¥Àº Ŭ¶óÀ̾ðÆ®ÀÇ ¸Þ½ÃÁö¸¦ Àо ±×´ë·Î Àç Àü¼ÛÇÏ´Â echo ÇÁ·Î±×·¥ÀÌ´Ù.


1.6. °ü·Ã¹®Çå

  1. Socket Layer

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