#include <arpa/inet.h>
#define SIZE sizeof(struct sockaddr_in)
int sock1, sock2;
void f(int sig)
{
fprintf(stderr, "SIGPIPE is received\n");
close(sock2); close(sock1); exit(0);
}
int main()
{
char c;
struct sockaddr_in addr = {AF_INET, 5000, INADDR_ANY};
signal(SIGPIPE, f);
...
(후략)
이와 같은 TCP 통신 예제 코드에서,
signal 함수가 무엇인지 궁금해져서 조금 찾아보았다.
int signo, void(*func)(int)signo : 특정 상황에 대한 정보void(*func)(int) : 특정 상황에서 호출될 함수의 주소 값(포인터)을 전달-> 첫 번째 인자를 통해 명시된 상황 발생 시, 두 번째 인자로 전달된 주소 값의 함수가 호출됨

여기서 SIGPIPE란,
이기 때문에
따라서 위의 코드에서는 SIGPIPE 시그널이 발생한 경우 f 함수를 호출해서, f 함수 안의 내용 대로 소켓1과 소켓2를 다 닫고 종료하게 한다!
출처 : https://hororolol.tistory.com/294, https://www.crocus.co.kr/460