소켓 옵션의 값을 변경함으로써 소켓의 수신버퍼 크기 변경 가능

getsockopt() : 소켓의 옵션 값을 참조

setsockopt() : 소켓의 옵션 값을 지정


int getsockopt(int socket, int level, int optName, void *optVal, Unsigned int * optLen)

int setsockopt(int socket, int level, int optName, const void *optVal, Unsigned int * optLen)


--- 소켓 버퍼크기 지정 프로그램 ---

int rcvBufferSize;

int sockOptSize;


sockOptSize = sizeof(rcvBufferSize);

if(getsockopt (sock, SOL_SOCKET, SO_RCVBUF, &rcvBufferSize, &sockOptSize) <0)

DieWithError("");


..... 생략됨


-----------------------------------



신호(Signals)

프로그램들에게 어떤 사건들이 발생했다는 것을 알리는 체계를 제공

예 : 사용자가 인터럽트 문자(리눅스의 Ctrl+C)를 입력했을 때, 타이머 만료


신호가 수행중인 프로그램에 전달될 때 다음 네가지 중 하나가 발생

1. 신호가 무시

2. 프로그램이 운영체제에 의해 강제저긍로 종료

3. 프로그램에 의해 지정된 신호처리 루틴이 수행

4. 신호가 블록 : 프로그램이 전달을 허용하는 조치를 취할 떄까지 어떤 효과를 내는 것을 막음


--- 신호 처리 프로그램 ---

// sigaction.c


#include <stdio.h>

#include <signal.h>

#include <unistd.h>

#include <stdlib.h>


void DieWithError(char *errorMessage);

void InterruptSignalHandler(int signalType);    // 신호에 대한 처리를 해줄 함수


int main(int argc, char *argv[])

{

struct sigaction handler;    //신호 처리를 위한 구조체 핸들러 선언


handler.sa_handler = InterruptSignalHandler;    //신호 구조체 선언

if(sigfillset(&handler.sa_mask) <0)    //신호를 어떻게 처리할 지 선언(마스크 = 블럭)

DieWithError("sigfillset() failed");

handler.sa_flags = 0;


if (sigaction(SIGINT, &handler, 0) <0)

DIeWithError("sigaction() failed");


for(;;)

pause();


exit(0);

}


void InterruptSignalHandler(int signalType)

{

printf("Interrupt Received. Exiting program.\n");

exit(1);

}

/* 위 함수와 교체 부분

void InterruptSignalHandler(int ignored)

{

printf("Interrupt Received.\n");

sleep(3);

}

*/

※ 시스템 상에서 인터럽트를 2번만 받기 떄문에 Ctrl+C를 3번 연속 눌러도 Interrupt Received 메시지는 2번만 출력됨.







'Network' 카테고리의 다른 글

멀티태스킹(Multi tasking)  (0) 2013.11.11
신호(Signals)  (0) 2013.11.04
UDPEchoServer  (0) 2013.10.30
소켓옵션들  (0) 2013.10.28
tcp/ip 소켓 프로그래밍 함수 소개  (0) 2013.09.16

+ Recent posts

티스토리 툴바