Public 131

넌블러킹 소켓

socket() 으로 생성되는 소켓은 기본값으로 Blocking 소켓이다. 하지만 이미 생성된 소켓을 fcntl() 함수를 사용하여 nonblocking socket으로 변경 가능하다. ※ Blocking Socket(B)/Nonblocking Socket(N) (여기서 errno는 errno.h를 인클루드해야 이용할수 있다.) - read B : read 버퍼가 비어있을때 block N : read 버퍼가 비어있을때 -1 return, errno==EWOULDBLOCK/EAGAIN * Blocking socket의 경우에 read 버퍼에 존재하는 데이터의 크기가 read시 요청한 데이터의 크기보다 작은 경우라도 read 버퍼에 존재하는 데이터만큼 리턴되며 block 되지 않음. - write B : w..

Public/tip & tech 2009.12.22

네트워크 함수의 Blocking/Non Blocking I/O" 동작

어찌보면 당연한 건데, 오해를 갖기 쉬운 "네트워크 함수의 Blocking/Non Blocking I/O" 동작들을 정리해 보았습니다. 1. 입력함수: read, readv, recv, recvfrom, recvmsg Blocking TCP 소켓인 경우, 소켓수신버퍼에 수신된 데이터가 없으면, 프로세스는 sleep한다. 데이터가 도착하면 (그것이 충분한 크기가 아닐지라도) 프로세스는 깨어난다. 원하는 크기만큼 도착할때까지 기다리려면, while로 계속 받아 붙이던가, 아니면, MSG_WAITALL 플래그를 이용한다. UDP 소켓인 경우, 소켓수신버퍼가 비어 있으면, 프로세스는 sleep한다. UDP패킷이 도착하면, 프로세스는 깨어난다. Nonblocking 소켓의 경우, 수신버퍼가 비어 있는 경우, 에러..

Public/tip & tech 2009.12.22

[개발 팁]개발시 성능 시험 이슈에 대한 팁 공유

이 메일은 제가 근무하는 필링크 전사메일로 뿌린 내용입니다. 안녕하세요. LGT WAP20 프로젝트를 진행하고 있는 전성현 과장입니다. 많은 분들이 개발이 완료되고 기능시험을 무난히 통과 한 후 성능시험을 진행하다 예상치 못하게 성능이 안나와 고전하신 적이 많으실 거라 생각되어 팁 공유차원에서 메일을 드립니다. 사실 우리가 격는 성능 이슈의 많은 부분을 차지하는 것이 1. 메모리 누수 2. 과도한 CPU 사용으로 인한 TPS 저하 입니다. 1번은 2번에 비해 찾기가 오히려 쉬우므로 넘어가겠습니다. 11월경 LGT WAP20 IP 인증 구조개선 프로젝트에 대한 성능 시험이 있었습니다. 문제가 되었던 것이 구조개선 전 1700 TPS 의 성능을 자랑하던 WAP G/W 가 TPS 1000 을 못넘고 700 에..

Public/tip & tech 2009.12.18

프로세스간 통신 UDS

UDS UDS(Unix Domain Socket)은 내부 프로세스들 끼리 TCP 또는 UDP 프로토콜을 이용하여 통신할 수 있도록 도와주는 소켓입니다. 이 소켓을 이용하시면 기존의 TCP/IP, UDP/IP에서 사용하던 함수로 같은 방법을 사용하여 프로세스들끼리 통신할 수 있어 매우 편리하며, 이점이 장점입니다. 말씀 드린 바와 같이 TCP/IP, UDP/IP와 같은 함수를 사용하고 다만 필요한 변수값만 바꾸어 주면 됩니다. 예를 들어 소켓을 생성해 보겠습니다. TCP/IP와 UDP/IP에서 처럼 socket() 함수를 이용합니다. 우선 #include 대신에 #include 를 사용합니다. 자, socket() 함수를 호출해 보겠습니다. int sock; sock = socket( PF_FILE, SO..

Public/tip & tech 2009.12.11

reentrant (재진입성) 함수와 쓰레드안전(MultiThread-safe)

* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.) 우선 책에 애매모호하게 짧게 나와서 이를 종종 질문해오시는 분들이 많아서 이렇게 긴글을 쓰게 되었습니다. 매번 설명하는것도 힘들고 해서 다음부터는 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다. 그럼 우선 논란이 된 "Advanced 리눅스 시스템 프로그래밍"책의 해당 내용을 적어보도록 하겠습니다. * 원자성과 쓰레드 - 안전, 재진입성에 대해서 원자성(atomicity)이 보장되는 코드(or ..

Public/tip & tech 2009.10.16

sockaddr, sockaddr_in 구조체

sockaddr 구조체 소켓 주소를 표현하는 구조체다. 아래 정의를 보면 주소 체계와 주소 두가지 정보만 갖고 있는 단순한 구조로 되어있다. 원래 소켓 자체가 TCP/IP만을 목적으로 만들어진 것이 아니어서, 다양한 주소 체계에 맞게 범용 목적으로 사용하기 위해 이런 구조를 가지고 있다. struct sockaddr{ sa_family_t sa_family; // 소켓의 주소체계. PF_INET= IPv4 주소체계. char sa_data[14]; // 해당 주소체계에서 사용하는 주소 정보. } sockaddr_in 구조체 IPv4 주소체계에서 사용하는 구조체다. 소켓 프로그램은 범용 주소 구조체로 sockaddr을 사용하지만, 주소체계의 종류에 따라 별도의 전용 구조체를 만들어 사용하는게 아무래도 편리..

Public/tip & tech 2009.08.17

[TCP/IP 소켓 프로그래밍] 15. 소켓과 표준 입출력

15-1. 표준 입출력 함수의 장점 표준 입출력 함수의 장점 이식성이 좋아진다. - 모든 시스템은 ANSI 표준 C를 지원한다. 효율성을 높일 수 있다. - 표준 입출력 함수에 의한 버퍼를 제공받는다. (표준 입출력버퍼, 소켓 버퍼) - 소켓 생성 버퍼 목적 : 프로토콜의 완성을 위한 것. - 표준 입출력 버퍼 목적 : 성능 향상 파일 포인터와 파일 디스크립터 파일 포인터 - 표준 입출력 함수 호출을 위해서 필요한 파일 포인터. = FILE 구조체의 포인터. 파일 디스크립터를 이용한 시스템 입출력 - 시스템 입출력 함수 사용 시 필요 - 정수값이다. ※ 소켓 기반의 표준 입출력 함수 사용을 위해 파일 디스크립터를 기반으로 파일 포인터를 생성. 15-2. 표준 입출력 함수의 사용 파일 디스크립터 -> 파일..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 14. Multicast & Broadcast

유선 : 고객에게 서비스를 제공. 멀티캐스트 방식(가입이 필요) 안테나 방송 : 서비스를 지정된 채널로 제공. 브로드캐스트 방식(가입 필요 없음) 14-1. 멀티캐스트(Multicast) 멀티캐스트 전송 방식. UDP를 기반으로 하는 전송 방식. 멀티캐스트 그룹(클래스 D에 속하는 IP주소)을 기반으로 멀티캐스트 패킷을 주고 받음. 하나의 멀티캐스트 패킷은 라우터를 통해서 다수의 호스트에 전송. (한 번만 방송하면 가입자 모두 시청 가능.) (정보를 단방향으로 제공할 때 주로 사용.) 라우팅(Routing)과 TTL(Time To Live) 라우팅 : 라우터에 의해서 패킷이 경로를 찾는 과정 TTL 거쳐갈 수 있는 라우터의 수(홉)를 의미. 이 값이 0이 되면 패킷은 더 이상 전달되지 못하고 소멸된다. ..

Public/tip & tech 2009.08.14