본문 바로가기

TCP/IP

소켓의 생성과 해지

TCP와 UDP를 이용해 통신하려면 프로그램이 운영체제에 소켓 인스턴스의 생성을 요청해야한다.
이러한 과정을 수행하는 함수가 socket()이다.
 
int socket(int domain, int type, int protocol)
 
첫번째 인자인 domain은 프로토콜 패밀리, 소켓의 통신영역을 결정
PF_INET : 인터넷 체계방식
PF_INET6 : IPv6 인터넷 체계방식
PF_UNIX : 유닉스 체계방식
PF는 protocol family 약자
 
두번째 인자인 type는 소켓의 형식을 결정
SOCK_STREAM : 스트림형 소켓(TCP)
SOCK_DRDGRAM : 데이터그램형 소켓(UDP)
 
세번째 인자는 사용될 종단 간 프로토콜을 구체적으로 명시
IPPROTO_TCP를 사용하면 스트림 소켓을 위한 TCP를 사용
IPPROTO_UDP를 사용하면 데이터그램 소켓을 위한 UDP를 사용
이 곳에 상수 0을 사용하면 시스템이 프로토콜 집합체와 형식을 보고 알맞은
종단 프로토콜을 자동으로 선택한다.
 
int close(int scoket)
 
close()는 하부 프로토콜 스택에 통신을 종료하기 위해 필요한 작업을 수행하라고 알리고 해당
소켓에 연관된 모든 자원을 회수한다.
성공시에는 0을 반환하고, 실패 시 -1을 반환한다.

 

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

int main()
{
  int fd1, fd2, sd1, sd2;

  //file open
  fd1 = open("/etc/passwd", O_RDONLY, 0);
  printf("/etc/passwd's file descripter = %d\n", fd1);

  //stream socket create
  sd1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  printf("stream socket descripter = %d\n", sd1);

  //datagram socket create
  sd2 = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  printf("datagram socket descripter = %d\n", sd2);

  //another file open
  fd2 = open("/etc/hosts", O_RDONLY, 0);
  printf("/etc/hosts's file descripter = %d\n", fd2);

  //file & socket close
  close(fd2);
  close(fd1);
  close(sd2);
  close(sd1);

  return 0;
}


'TCP/IP' 카테고리의 다른 글

inet_addr()함수, (=inet_aton)  (0) 2011.07.01
호스트pc(리틀엔디안) <-> 네트워크(빅엔디안)  (0) 2011.07.01
gethostbyname() 함수  (0) 2011.07.01
inet_ntoa() 함수  (0) 2011.07.01
네트워크 프로그래밍 실습  (0) 2011.06.28