목록Linux/TCP IP Socket Programming (19)
min's devlog
Signal 처리 시그널? -프로세스에서 어떤 이벤트가 발생한 것을 다른 프로세스에게 알리는 도구 -소프트웨어 인터럽트 라고도 한다. (잠깐 멈추게 할 수 있기 때문에) -주로 운영체제가 일반 프로세스에게 보낸다. 유닉스의 시그널 이름은 SIG로 시작한다. 자세한 내용은 signal.h 파일에 명시되어있다. 리눅스는 환경이 다 다르다. 에 정의되어있었다. 시그널 종류와 발생 조건 시그널 발생조건 SIGINT 인터럽트키(CTRL-c)를 입력했을 때 SIGKILL 강제종료 시그널로 프로세스가 이 시그널을 무시/블록할 수 없음 SIGIO 비동기 입출력이 발생했을 때 SIGPIPE 닫힌 파이프나 소켓에 데이터 쓰기/읽기를 시도할 때 SIGCHLD 자식 프로세스가 종료되거나 취소될 때 부모프로세스에 전달 SIGP..
SO_RCVBUF - SO_RCVBUF 옵션을 설정하면 커널의 수신 버퍼와 송신 버퍼의 크기를 조정할 수 있다. 예제 디폴트 수신 버퍼 크기를 출력하고, 크기를 1024로 조절했을 때 변경된 수신 버퍼의 크기도 출력한다. 컴파일 : gcc -o rcvbuf chg_rcvbuf.c 실행 : ./rcvbuf #include #include #include #include #include #include #include #include int main() { int s; int val,len; if((s=socket(AF_INET, SOCK_STREAM,0)) < 0) { perror("socket fail"); exit(1); } len=sizeof(val); if(getsockopt(s, SOL_SOCKE..

멀티캐스트 - 하나의 데이터그램을 다수의 호스트로 동시에 전송한다.(1:m) (- 중간 라우터가 지원해주어야한다.) 예) naver에서 축구 중계를 해준다면 패킷 한개를 보내는데, 이는 여러 갈라지는 곳의 라우터가 하나를 복사해서 지역마다 별도로 보내는 것이다. 이를 지원하는 것이 멀티캐스트 라우터 라고 함. - 클래스 D의 IP주소를 그룹주소로 사용한다 (-D는 1110, A는 0, B는 10, C는 110으로 시작한다) -로컬 네트워크는 일일히 copy해서 보낸다. 자신에 들어온 정보를 모든 호스트에게 보내려면 이더넷의 브로드캐스트 방식을 사용한다. IP 멀티캐스트 address를 Ethernet 멀티캐스트 address로 Mapping -32, 48비트가 서로 매핑이 안되기 때문에 멀티캐스트 이더넷..
SO_RCVBUF, SO_SNDBUF -receive 버퍼와 send버퍼 -접속 설정 이후에는 사용할 수 없다. (connect():접속설정) : 클라이언트는 connect()호출 이전에 설정 -SO_RCVBUF 버퍼의 최대 크기는 131070, 최소 크기는 256이다. SO_REUSEADDR int set = 1; setsockopt(udp_sock1, SOL_SOCKET, SO_REUSEADDR, (void*)&set, sizeof(int)); 포트번호는 앱식별자. 포트가 끊어지지 않으면 다시 사용할 순 없다 그러므로 한 호스트 내에서는 같은 포트번호를 중복으로 사용할 수 없다. 그러나 이 옵션을 쓰면 소켓 주소를 다시사용하고 싶을 때 포트번호를 재사용 할 수 있다. 원래는 안되지만, 소켓주소 재사용..

소켓 옵션 종류 SO_KEEPALIVE - TCP 연결이 정상적으로 지속되고 있는지 주기적으로 확인하는 기능이다. - 이 옵션이 세트되어 있으면, TCP는 확인시간(예:2시간)동안 데이터 송수신이 없을 때, TCP연결이 살아있는지 질문(keep alive prove)을 전송한다. - Keep Alive Prove를 보내면 돌아오는 세 가지 응답 상대방이 ACK를 보낸다 : TCP 연결이 정상적! 상대방이 RST 에러를 보낸다(reset). : 상대방 호스트가 꺼진 후 재부팅 된 상태이다. TCP는 소켓을 닫으며 에러코드는 ECONNRESET 아무 응답이 없다 : 질문을 8번정도 더 보내본 후 연결 종료-ETIMEDOUT SO_LINGER - close() 호출시에는 (닫기) 송신버퍼에 데이터가 남아 있어..