TCP 통신

ㅇsocket 함수
int socket(int domain, int type, int protocol);
ㄴdomain : 소켓이 사용할 프로토콜 체계
ㄴtype : 소켓의 데이터 전송방식
ㄴprotocol: 두 컴퓨터 간 사용되는 프로토콜 정보
serv_sock=socket(PF_INET, SOCK_STREAM, 0); // IPv4, 연결지향형 소켓, 깍두기
PF_INET = IPv4 인터넷 프로토콜 체계 (PF_INET = IPv6)
SOCK_STREAM = 연결지향형 소켓
=> IPv4 인터넷 프로토콜 체계에서 동작하는 연결지향형 데이터 전송 소켓을 만들겠다!
연결지향형 소켓(SOCK_STREAM) 특징
-데이터가 중간에 소멸되지 않고 목적지로 전송
-전송 순서대로 데이터 수신
-데이터의 경계가 존재하지 않음
데이터를 송수신하는 소켓은 내부에 버퍼(배열)가 있다.
그래서 소켓에 전송되는 데이터는 일단 버퍼에 저장됨.
멀티쓰레드
쓰레드의 문제점 = 임계영역 (쓰레드에 의해 실행되는 함수 내에 존재)
동기화: 한 쓰레드가 변수에 접근해서 연산을 완료할 때 까지, 다른 쓰레드가 접근하지 못하도록 막는 것
변수에 접근하는 두 쓰레드가 임계영역
동기화 기법
1. 뮤텍스
2. 세마포어
< 뮤텍스 >
자물쇠를 만드는 것
pthread_mutex_init // 자물쇠 생성
pthread_mutex_destroy // 자물쇠 파괴
pthread_mutex_lock // 자물쇠 잠금 < 임계영역 들어가기 전 호출
임계영역 시작
...
임계영역 끝
pthread_mutex_unlock // 자물쇠 해제 < 다른 쓰레드가 이미 임계영역에 있으면 호출됨
lock,unlock이 임계영역을 감싼다.
tip. 프로그램의 성격에 따라 임계영역을 얼만큼 잡을지 판단하는 능력을 기르면 좋다.
쓰레드 소멸 방법
1. join
2. detach
< join >
쓰레드의 종료를 대기 및 소멸유도
단점: 쓰레드가 종료될 때 까지 블로킹 상태