본문 바로가기

지식/Network

socket 함수

socket

 

socket 함수는 소켓을 만들고 소켓 기술자(descriptor)를 어플리케이션에 반환 하는 함수 입니다.

 

SOCKET socket (
        int  
af,
        int  
 type,
        int  
protocol
);

 

Parameters

af
[입력] 어드레스 체계(address family)를 결정합니다.

type
[입력] 소켓의 타입을 결정합니다.

           윈도우즈 소켓 1.1에서는 두가지 종류의 타입을 제공합니다. 아래에 그 종류에 대해서 간단히 설명했습니다.


    Type Explanation
    SOCK_STREAM 신뢰성있고, 접속지향적인, 하지만 느린, TCP 어드레스 체계에 사용됩니다.
    SOCK_DGRAM 비접속이고, 신뢰성없는 그러나 빠른, UDP 어드레스 체계에 사용됩니다.

protocol
[입력] 소켓과 함께 어느 프로토콜이 사용될 것인지 지정합니다.

 

Remarks

socket 함수는 소켓 기술자(descriptor)를 만들어내고, 관련되 리소스를 할당하고, 지정된 트랜스포트 서비스 프로바이더와 엮는 일을 합니다. 윈도우즈 소켓 시스템은 type, protocol 매개변수 그리고 어드레스 체계(af)와 부합하는 사용가능한 서비스 프로바이더를 사용할 것입니다. 새로 생성된 소켓은 기본적으로 중복된 속성을 가지게 될 것입니다. Microsoft 운영체제에서 MSWSOCK.H 에 정의 되어있는 Microsoft-specific 소켓 옵션은 이 기본속성에 영향을 줄 수 있습니다. 중복된 속성이 없는 소켓은 WSASocket 함수를 이용해서 생성할 수 있습니다. 중복연산을 허용하는 모든 함수(WSASend, WSARecv, WSASendTo, WSARecvFrom, 그리고 WSAIoctl)는 중복연산과 관련된 매개변수가 NULL일 경우 중복되지 않은 연산을 처리할 수 있도록 또한 지원됩니다.

af 매개변수는 AF_INET이나 AF_UNSPEC가 될 수 있는데, af 매개변수가 AF_UNSPEC 일 경우 protocol 매개변수를 반드시 지정해야 합니다.

SOCK_STREAM 과 같은 접속지향 소켓(connection-oriented sockets)은 양방향 접속을 지원하고, 어떤 데이터가 보내지고 수신되기 전에 접속된 상태가 되어 있어야만 합니다. 이러한 접속된 상태는 connect 함수를 호출해서 이룰 수 있습니다. 접속되었을 때 데이터는 send 그리고 recv 함수를 호출하여 전송 및 수신 할 수 있습니다. 소켓을 다 사용하고, 해제 할 때는 반드시 closesocket 함수가 수행 되어야 합니다.

비접속소켓, 즉, 메세지 지향 소켓(message-oriented sockets)은 sendto 그리고, recvfrom 함수를 이용해 상대방으로 부터의 데이터그램의 수신과 상대방으로의 데이터 송신을 수행 할 수 있습니다. 만약 이러한 소켓(메세지 지향 소켓) 특정한 원격지로 접속되어 있다면, 데이터그램은 send 그리고, recv 함수를 이용해 데이터그램을 전송 및 수신 할 수 있습니다.

 

Return Values

에러가 발생되지 않았다면, 소켓은 새로운 소켓의 기술자를 반환 합니다. 에러가 발생한 경우에는 INVALID_SOCKET을 반환하고, 특정한 에러코드를 WSAGetLastError 함수를 이용해서 얻을 수 있습니다.

 

Error Codes

WSANOTINITIALISED

이 함수를 사용하기 전에 성공적인 WSAStartup 함수의 호출이 없었습니다.

WSAENETDOWN 네트웍 서브시스템에 에러가 발생했거나 서비스 프로바이더에 에러가 발생 했습니다.
WSAEAFNOSUPPORT 지정된 어드레스 체계가 지원되지 않습니다.
WSAEINPROGRESS 블럭킹 윈속 v1.1 이 현재 진행 중이거나, 서비스 프로바이더가 콜백 함수를 여전히 처리하고 있습니다.
WSAEMFILE 사용할 수 있는 소켓기술자가 바닥 나 있어서 소켓을 생성할 수 없습니다.
WSAENOBUFS 사용할 수 있는 버퍼가 바닥 나 있어서 소켓을 생성할 수 없습니다.
WSAEPROTONOSUPPORT 지정된 프로토콜이 지원되지 않는 형식입니다.
WSAEPROTOTYPE 지정된 프로토콜이 잘못되었거나 이 소켓에 대해서 잘못된 형식입니다.
WSAESOCKTNOSUPPORT 지정된 소켓 타입이 지정한 어드레스 체계에서 지원되지 않는 형식입니다.

 

QuickInfo

Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

 

See Also

overview, accept, bind, connect, getsockname, getsockopt, ioctlsocket, listen, recv, recvfrom, select, send, sendto, setsockopt, shutdown, WSASocket