2009. 12. 15. 10:02

socket()



통신을 하기 위해선 소켓을 생성해야 한다. 소켓은 통신을 위한 엔드포인트 정도로 생각하면 될 듯 하다.
소켓을 생성하기 위해서 socket() 이란 함수를 사용한다. socket()를 통해 시스템 내부적으론 소켓을 생성하고, 생성된 소켓을 조작하기 위한 파일 디스크립터를 리턴한다.

#include <sys/types.h>
#include <sys/socket.h>

int socket (int domain, int type, int protocol);

  • domain - 통신을 하기 위해 사용할 프로토콜 체계(Protocol Family)
  • type - 소켓에서 사용하게 될 데이터 전송 타입
  • protocol - 통신을 하기 위한 프로토콜
  • 리턴값 - 성공 시 int형 파일 디스크립터, 실패 시 -1 리턴

일반적으로 아래와 같이 TCP socket 또는 UDP socket 를 생성하여 사용하게 된다.
...
int tcp_sock, udp_sock;
tcp_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
udp_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
...

리턴값으로 파일 디스크립터를 받게 되는데, 리눅스에서 현재 사용하고 있는 디스크립터(0, 1, 2 이외의 )가 있다면 그 다음 숫자부터 차례로 디스크립더를 리턴받게 된다.

'Programmings > TCP/IP socket programming' 카테고리의 다른 글

connect()  (0) 2009.12.18
listen() and accept()  (0) 2009.12.16
bind()  (0) 2009.12.15