kakasoo

[TCP/IP] send & recv, MSG_OOB 본문

프로그래밍/네트워크

[TCP/IP] send & recv, MSG_OOB

카카수(kakasoo) 2020. 7. 20. 17:34
반응형
  • act.sa_handler = urg_handler;
  • sigemptyset(&act.sa_mask);
  • act.sa_flags = 0;

 

  • fcntl (recv_sock, F_SETOWN, getpid());
  • state = sigaction (SIGURG, &act, 0);

이 코드들에 대해서 이야기 해보도록 하자!

 


 

 

MSG_OOB : 긴급 메세지의 전송

저자는 다음과 같이 설명한다. 만약 환자들이 줄 서 있는 병원에 긴급 환자가 오면, 길을 비켜주는 게 당연한 수순 아니냐고, 즉 차례를 양보한다는 뜻.

여기서의 긴급 메세지도 비슷한 의미로서, 긴급한 메세지의 경우 전송 방법과 경로를 달리 하겠다는 뜻이다.

server 측에서는 그저 send() 함수에 옵션을 넣어서 보내주기만 하면 된다, 아래의 간략한 코드를 보도록 하자.

 

1 : write(sock, "123", strlen("123"));

2 : send(sock, "4", strlen("4"), MSG_OOB);

3 : write(sock, "567", strlen("567"));

4 : send(sock, "890", strlen("890"), MSG_OOB);

 

원래대로면 이 코드들은 123 4 567 890 이라는 순서로 전송되는 것이 맞다.

그러나 이대로만 전송되면 긴급하다는 것을 구태여 표시한 게 의미가 없을 것이다, 그러나 server의 일은 끝났다.

당연한 거다, 사실 긴급한 건 server인 게 맞긴 하지만, 그걸 처리하는 것도 server일 수는 없지 않은가.

(정확히는 긴급 메세지를 받은 쪽이 긴급하게 움직여야 한다는 것이다, 환자가 긴급하게 움직일 순 없으니.)

client측 code를 보자, 이 쪽이 사실 main이다.

 

accept() 다음에 다음의 코드를 입력해주어야 한다.

1 : fcntl (recv_sock, F_SETOWN, getpid());

이는 파일 디스크립트 컨트롤 (File discript CoNtrol) 이라는 의미의 함수인데, 의미는 아래와 같다.

"파일 디스크립터 recv_sock이 가리키는 소켓 소유자 (F_SETOWN)을 getpid() 함수가 반환하는 ID의 프로세스로 변경시키겠다."

아, 말이 너무 어렵다, 더 쉽게 풀어서 이야기해보자.

recv_sock은 데이터를 받는 소켓이다, 즉 클라이언트인 소켓을 의미한다.

이 소켓이 가리키는 소켓 소유자, 즉 운영체제다, 운영체제, 운영체제일 수밖에 없다.

다만 엄밀히 말하자면, 운영체제 전체를 말하는 게 아니라, 이 소켓과 관련된 부분을 의미한다.

다시 이야기해보자.

 

"이 FD (recv_sock)가 가리키는 소켓의 소유자 (그리고 그 프로세스)를 getpid()가 반환하는 프로세스로 변경한다."

 

프로세스가 무엇인지는 이미 설명이 되었지만, 다시 말하겠다.

프로세스는 작동 중인 프로그램, 즉 단순히 저장되어 있기만 한 byte들이 아니라, 실행되고 있는, 일련의 흐름이다.

이 흐름을 바꾼다는 것이 어떤 의미인지는, 긴급 메세지를 설명하고 있기 때문에 이미 추측할 수 있다.

그럼 여기서의 프로세스는 뭘까?

다시 정리하자.

 

"recv_sock을 담당하는 부분의 SIGURG 시그널을 처리하는 프로세스를 getpid()가 반환하는 프로세스로 변경한다."

 

SIGURG 시그널 처리는, SIGURG 시그널의 핸들러 함수 호출을 의미한다.

SIGURG 시그널을 핸들링할 때에는 반드시 시그널을 처리할 프로세스를 지정해주어야 하는데, act.sa_handler = urg_handler 라는 부분이 여기에 해당한다.

urg_handler는 우리가 직접 구현할 부분인데, 긴급한 경우 해당 함수가 호출되도록 구현하는 것이다.

행동할 내용은

 

// 나중에 다시 정리하겠다.

// 너무 난잡한 게 보기도 나쁘고, 그리고 내 이해도도 깊지 않은 듯 하다.

 

반응형