사용 가능 함수

hyenam·2022년 6월 29일

webserv

목록 보기
5/6

Everything in C++ 98.

엔디안 변환 함수

바이트 저장 방식에 따라 CPU마다 차이가 발생하는데,
가장 낮은 바이트를 맨 앞에 저장하는 것을 리틀 엔디안 방식이라고 하고
가장 높은 바이트를 맨 앞에 저장하는 것을 빅 엔디안 방식이라고 한다.

서로 다른 저장방식을 사용하는 시스템끼리 통신을 하게 되면 원치 않는 값을 주고받을 수 있다. 그래서 이런 문제를 해결하기 위해 데이터 통신을 할때는 명시적으로 네트워크 byte order를 따르도록 데이터 byte order를 변경해주어야 한다.

네트워크 바이트 정렬은 빅 엔디안 방식이다. (호스트는 리틀 엔디안.)

아래 함수들은 byte order방식을 바꾸어 준다.

  • htons - 2byte 데이터(short)를 빅 엔디안으로 변환해준다.
  • htonl - 4byte 데이터(long)를 빅 엔디안으로 변환해준다.
  • ntohs - 2byte 데이터(short)를 리틀 엔디안으로 변환해준다.
  • ntohl - 4byte 데이터(long)를 리틀 엔디안으로 변환해준다.

system call

select, poll, epoll, kqueue

시스템 콜 함수들은 설명하기 너무 어려워, 다른 사이트 글들로 대체

select는 너무 구식이니 poll 혹은 select의 강화버전인 epoll 사용하는 것을 추천한다.

soket

클라이언트-서버 환경 생성 흐름

  • 서버
  1. socket()으로 소켓 생성.
  2. bind()로 소켓 주소 할당.
  3. listen()으로 클라이언트의 연결 대기.
  4. accept()로 클라이언트의 연결 수신.
  5. 그후 요청 처리.
  • 클라이언트
  1. socket()으로 소켓 생성.
  2. connect()로 서버 연결 시도.
  3. 요청 메시지 전달.

socket

int socket(domain, type, protocol);

소켓을 만들기 위한 함수

  • domain - 프로토콜 체계
    • PF_INET - 인터넷 체계 사용
    • PF_UNIX - UNIX방식 체계 사용
    • PF_NS - XEROX 방식 체계 사용
    • TCP/IP 사용하려면 인터넷 체계인 PF_INET를 사용해야한다.
  • type - 서비스 타입
    • SOCK_STREAM - 스트림 방식 (연결형. TCP)
    • SOCK_DGRAM - 데이터 그램 방식 (비연결형. UDP)
  • protocol - 소켓을 지원하는 프로토콜
    • 0을 쓰면 시스템이 자동으로 설정
  • accept - 연결처리 함수. 연결형 소켓타입에 사용된다.
    • 블록함수기 때문에 연결 요청이 들어올떄까지 리턴하지 않고 대기함.
  • listen - 연결 대기 함수.
  • send - 소켓에 데이터를 전송하는 함수.
  • recv - 소켓으로부터 데이터를 수신받는 함수.
  • bind - 소켓에 주소할당해주는 함수.
  • connect - 연결요청 함수. 클라이언트 -> 서버 연결요청할때 사용.
  • inet_addr - IPv4 주소를 빅 엔디안으로 변환해주는 함수.
  • setsockopt - 소켓 속성값 변환 함수.
  • getsockname - 소켓 정보(주소)를 가져오는 함수.
  • fcntl - 파일의 속성을 얻거나 변경하는 함수.

학습에 참고한 사이트

profile
공부한 걸 정리하고 있습니다.

0개의 댓글