linux man page : recvfrom - ¼ÒÄÏÀ¸·Î ºÎÅÍ ¸Þ½ÃÁö¸¦ ÀоîµéÀδÙ.
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

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

1장. recvfrom(2)

차례
1.1절. »ç¿ë¹ý
1.2절. ¼³¸í
1.3절. ¹Ýȯ°ª
1.4절. ¿¡·¯
1.5절. ¿¹Á¦

¼ÒÄÏÀ¸·Î ºÎÅÍ ¸Þ½ÃÁö¸¦ ÀоîµéÀδÙ.


1.1절. »ç¿ë¹ý

#include <sys/socket.h>

#include <sys/types.h>

int recvfrom(int s, void *buf, size_t len, int flags, 
     struct sockaddr *from, socklen_t *fromlen); 
		


1.2절. ¼³¸í

ÀÌ ÇÔ¼ö´Â ¼ÒÄÏÀ¸·Î ºÎÅÍ µ¥ÀÌŸ¸¦ ÀоîµéÀ̱â À§Çؼ­ »ç¿ëµÇ¸ç, ¿¬°áÁöÇâÀ̵çÁö ¾Æ´ÏµçÁö°£¿¡ µ¥ÀÌŸ¸¦ ÀоîµéÀϼö ÀÖ´Ù.

s´Â ¼ÒÄÏÁöÁ¤ÀÚÀ̸ç, buf·Î µ¥ÀÌŸ¸¦ ÀоîµéÀÌ°Ô µÈ´Ù. À̶§ ÀоîµéÀÏ µ¥ÀÌŸÀÇ ÃÖ´ëÅ©±â´Â lenÀ» ÅëÇØ¼­ °áÁ¤µÈ´Ù.

from´Â ¸Þ½ÃÁöÀÇ ¿øÁÖ¼Ò¸¦ ³ªÅ¸³»´Âµ¥, ¿¬°áÁöÇâ¼ÒÄÏÀÌ ¾Æ´Ñ°æ¿ì¿¡¸¸ ä¿öÁø´Ù(¿¬°áÁöÇâ¼ÒÄÏÀÏ °æ¿ì acceptÇÒ¶§ È®ÀÎÀÌ °¡´ÉÇÔÀ¸·Î ±»ÀÌ ÀÎÀÚ¸¦ ½á¼­ ¿øÁÖ¼Ò¸¦ ÀоîµéÀÏ Çʿ䰡 ¾ø´Ù). fromlenÀº ÁÖ¼Ò±¸Á¶Ã¼ÀÇ Å©±âÀÌ´Ù.

flags´Â ´ÙÀ½Áß ¼±ÅÃÇØ¼­ ÁöÁ¤ÇÒ¼ö ÀÖ´Ù.

MSG_OOB

out-of-band data¸¦ ÀÌ °³³äÀ» Áö¿øÇÏ´Â ¼ÒÄÏÀ¸·Î º¸³½´Ù.

MSG_DONTROUTE

ÆÐŶÀ» Àü¼ÛÇϴµ¥ °ÔÀÌÆ®¿þÀ̸¦ »ç¿ëÇÏÁö ¾Ê°í Á÷Á¢ ¿¬°áµÈ ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ È£½ºÆ®·Î º¸³½´Ù. À̰ÍÀº diagnostic ȤÀº routing ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­¸¸ »ç¿ëÇÑ´Ù.

MSG_DONTWAIT

non-blocking¸¦ °¡´ÉÄÉ ÇÑ´Ù.

MSG_NOSIGNAL

´Ù¸¥ ÇÑÂÊÀÇ ¼ÒÄÏÀÇ ¿¬°áÀÌ ²÷°åÀ»¶§, ¼ÒÄÏÀ¸·ÎºÎÅÍ ¹ß»ýÇÏ´Â ½ºÆ®¸²»óÀÇ SIGPIPE¸¦ º¸³»Áö ¾Êµµ·Ï ¿ä±¸ÇÑ´Ù. ±×·¯³ª EPIPE¿¡·¯´Â ¿©ÀüÈ÷ ¹ÝȯµÈ´Ù.


1.3절. ¹Ýȯ°ª

¼º°øÇÒ°æ¿ì 0À» ½ÇÆÐÇßÀ»°æ¿ì¿¡´Â -1À» ¹ÝȯÇϸç, Àû´çÇÑ errno °ªÀ» ¼³Á¤ÇÑ´Ù.


1.4절. ¿¡·¯

EBADF

s °¡ À¯È¿ÇÑ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK

s °¡ ¼ÒÄÏÀÌ ¾Æ´Ñ ÆÄÀÏÀϰæ¿ì

EFAULT

½ÇÁ¦ÇÏÁö ¾Ê´Â »ç¿ëÀÚ °ø°£ÁÖ¼Ò°¡ ¸Å°³º¯¼ö·Î ÁöÁ¤µÇ¾ú´Ù.

EINTR

½ÅÈ£¹ß»ýÀ¸·Î ÀÎÇÏ¿© ÀÎÅÍ·´Æ®°¡ °É·È´Ù.

EPIPE

¿¬°áµÈ ¼ÒÄÏÀÌ ±úÁ³´Ù. MSG_NOSIGNALÀÌ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì ÇÁ·Î¼¼½º´Â SIGPIPE½ÅÈ£¸¦ ¹Þ°Ô µÈ´Ù.


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 = recvfrom(client_sockfd, buf, 80, 0, NULL, &client_len)) <= 0)
        {
            close(client_sockfd);
            continue;
        }
        sendto(client_sockfd,(void *)buf, 80, 0,
                        NULL, client_len);
        close(client_sockfd);
    }
}
		

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