winsock : bind - ¼ÒÄÏ¿¡ ÁÖ¼Ò¸¦ ÇÒ´çÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : ¸Þ´º¾ó>winsock API>bind



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

bind

¼ÒÄÏ¿¡ ÁÖ¼Ò, ÇÁ·ÎÅäÄÝ, Æ÷Æ®¸¦ ÇÒ´çÇÑ´Ù. file descriptor ´ë½Å¿¡ SOCKET°´Ã¼¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí BSD socket¿Í µ¿ÀÏÇÏ´Ù.

syntax

int bind( 
    SOCKET s, 
    const struct sockaddr *name, 
    int namelen 
); 
 

ÀÎÀÚ

  • s : socket()À¸·Î »ý¼ºµÈ ¼ÒÄϰ´Ã¼
  • name : ¼ÒÄϰ´Ã¼¿¡ ºÎ¿©ÇÒ ÁÖ¼ÒÁ¤º¸¸¦ Æ÷ÇÔÇÑ ±¸Á¶Ã¼
  • namelen : nameÀÇ µ¥ÀÌÅÍ ±æÀÌ. byte´ÜÀ§

¸®Åϰª

¼º°øÇßÀ» °æ¿ì 0À» ¸®ÅÏÇÑ´Ù. ½ÇÆÐÇßÀ» °æ¿ì SOCKET_ERRORÀ» ¸®ÅÏÇϰí error code¸¦ ¼³Á¤ÇÑ´Ù. WSAGetLastError ÇÔ¼ö¸¦ È£ÃâÇØ¼­ error code °ªÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.

error code ¼³¸í
WSANOTINITIALISED WSAStartup ÀÌ ¼º°øÀûÀ¸·Î È£ÃâµÈ ÀûÀÌ ¾ø´Ù.
WSAENETDOWN ³×Æ®¿öÅ© ¼­ºê½Ã½ºÅÛ¿¡¼­ ½ÇÆÐ
WSAEACCES ¿äûÇÑ ÁÖ¼Ò°¡ ºê·Îµåij½ºÆ® ÁÖ¼ÒÀε¥ setsockopt()·Î SO_BROADCAST °¡ ¼³Á¤µÇÁö ¾Ê¾Ò´Ù.
WSAEADDRINUSE µ¿ÀÏÇÑ ÁÖ¼Ò/Æ÷Æ®¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡¼­ »ç¿ëÇϰí ÀÖ´Ù. SO_REUSEADDRÀ» ÀÌ¿ëÇØ¼­ ÁÖ¼Ò¸¦ Àç»ç¿ëÇÒ °ÍÀ» ¸í½ÃÇÔÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.
WSAEADDRNOTAVAIL ÁöÁ¤µÈ ÁÖ¼Ò°¡ ¿Ã¹Ù¸¥ ÁÖ¼Ò°¡ ¾Æ´Ô
WSAEFAULT name ȤÀº namelen ÀÎÀÚ°¡ À߸øµÇ¾úÀ» °æ¿ì. namelenÀÌ ³Ê¹« À۰ųª, nameÀÌ À߸øµÈ ÁÖ¼ÒÇüŸ¦ Æ÷ÇÔÇϰí ÀÖÀ» °æ¿ì
WSAEINVAL ÀÌ¹Ì bindµÈ ¼ÒÄÏÀÓ
WSAENOBUFS ³Ê¹« ¸¹Àº ¿¬°á·Î ³²¾ÆÀÖ´Â ¹öÆÛ°¡ ¾øÀ½
WSAENOTSOCK s°¡ ¼ÒÄÏÀÌ ¾Æ´Ô

¼³¸í

bind ÇÔ¼ö´Â listen(),connect() È£ÃâÀü¿¡ »ç¿ëµÇ¸ç, ¿¬°áµÇÁö ¾ÊÀº ¼ÒÄÏÀ» ÇÊ¿ä·Î ÇÑ´Ù. bind´Â ÀϹÝÀûÀ¸·Î ¿¬°áÁöÇâ(stream) ȤÀº ºñ¿¬°áÁöÇâ(connectless) datagram ¼ÒÄÏÀ» À§Çؼ­ »ç¿ëµÈ´Ù. À̿ܿ¡µµ raw socket¿¡µµ »ç¿ëµÈ´Ù.

´ë°ÔÀÇ °æ¿ì ¼­¹öÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Âµ¥, Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â °æ¿ìµµ ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼­´Â ÁÖ·Î, port¸¦ ¸í½ÃÀûÀ¸·Î ÇÒ´çÇØÁÖ±â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù.

¼ÒÄÏ¿¡ ÇÒ´çµÇ´Â À̸§ - name -Àº Å©°Ô ¼¼°¡Áö·Î ±¸ºÐÀÌ µÈ´Ù. ÁÖ¼Òü°è, È£½ºÆ®ÁÖ¼Ò ±×¸®°í Æ÷Æ®¹øÈ£ÀÌ´Ù. sockaddr ±¸Á¶Ã¼¿¡¼­ óÀ½ 2byteÀÎ sa_family°¡ ÁÖ¼Òü°è¸¦ °¡¸®Å°°Ô µÇ´Âµ¥, ¼ÒÄÏÀ» »ý¼ºÇÒ ¶§ »ç¿ëÇß´ø ÁÖ¼Òü°è¿Í ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì WSAEFAULT ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

¸¸¾à PORT ¹øÈ£¸¦ 0À¸·Î ÇÒ´çÇϸé, ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ´Â (¸®´ª½ºÀÇ °æ¿ì¿¡´Â Ä¿³ÎÀÌ) 1024 ~ 5000 »çÀÌÀÇ °ªÀ» ÀÓÀÇ·Î ÇÒ´çÇÑ´Ù. º¸Åë Ŭ¶óÀÌ¾ðÆ®´Â PORT¸¦ 0À¸·Î ÇØ¼­ ÀÓÀÇ·Î Æ÷Æ®¸¦ ÇÒ´ç¹Þ¾Æ¼­ »ç¿ëÇϸç, ¼­¹ö ÇÁ·Î±×·¥À» PORT¸¦ ¸í½ÃÇØ¼­ »ç¿ëÇÑ´Ù. ¼­¹öÀÇ °æ¿ì¿¡´Â ¿¬°á¿äûÀ» Çϴ Ŭ¶óÀÌ¾ðÆ®°¡ Æ÷Æ®¹øÈ£¸¦ ¾Ë°í ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì ¸í½ÃÇØ¼­ »ç¿ëÇϱⰡ ¾î·Æ´Ù. ¿Ö³ÄÇÏ¸é ¸í½ÃÇÏ·Á´Â Æ÷Æ®°¡ ÀÌ¹Ì ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

¿¹Á¦

#include <winsock.h>  
#include <stdio.h>  
  
#define MAX_PACKETLEN 512  
#define PORT 5552  
  
int main()  
{  
    WSADATA wsaData;  
    int status;  
    int SockLen;  
    int Readn,Writen;  
    SOCKET EndpointSocket, ClientSocket;  
    struct sockaddr_in SockInfo, ClientSockInfo;  
    char ReadBuffer[MAX_PACKETLEN];  
  
  
    if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0)  
    {  
        printf("error\r\n");  
        return 0;  
    }  
  
    EndpointSocket = socket( AF_INET, SOCK_STREAM, 0 );  
    if( EndpointSocket == INVALID_SOCKET )  
        return 1;  
  
    printf("Success socket create\r\n");  
    ZeroMemory(&SockInfo, sizeof( struct sockaddr_in ));  
  
    SockInfo.sin_family = AF_INET;  
    SockInfo.sin_port = htons( PORT );  
    SockInfo.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  
    status = bind( EndpointSocket, (struct sockaddr*)&SockInfo, sizeof( struct sockaddr_in) );  
    if( status == SOCKET_ERROR)   
    {  
        printf("Bind Error\n");  
        return 0;  
    }  
    if( SOCKET_ERROR == listen( EndpointSocket, 5 ))  
    {  
        printf("listen Error\n");  
        return 0;  
    }  
  
    while(1)  
    {  
        ZeroMemory( &ClientSockInfo, sizeof( struct sockaddr_in ) );  
        SockLen = sizeof(struct sockaddr_in);  
        ClientSocket = accept( EndpointSocket, (struct sockaddr*)&ClientSockInfo, &SockLen );  
        if(ClientSocket == INVALID_SOCKET)  
        {  
            printf("Accept Error\n");  
            closesocket(EndpointSocket);  
            WSACleanup();  
            return 1;  
        }  
        printf("Accept Client\n");  
        Readn = recv( ClientSocket, ReadBuffer, MAX_PACKETLEN,0 );  
        if( Readn > 0 )  
        {  
            Writen = send( ClientSocket, ReadBuffer, Readn, 0 );  
        }  
        else  
        {  
            printf("read Error\n");  
        }  
        closesocket(ClientSocket);   
    }  
    closesocket( EndpointSocket );   
    WSACleanup();  
    return 0;  
  
}  
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.