본문 바로가기

소켓 프로그래밍

[2009/06/22] 소켓의 옵션 조작하기 1. 소켓의 옵션 조작이란? - 소켓의 옵션 조작 : 소켓의 기본적인 특성을 변경하는 것. - 소켓의 기본적인 특성 1) 입력 및 출력 버퍼의 크기 2) 데이터 전송 방식(TCP or UDP) 3) TTL(Time to live) - 소켓의 옵션은 거의 대부분 변경이 가능하지만 참조만 가능한 것도 있다. 2. 소켓의 옵션 관련 함수1(옵션 참조) #include #include int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen); (리눅스) #include int getsockopt(SOCKET s, int level, int optname, char FAR *optval, int FAR *optlen); (윈.. 더보기
[2009/06/21] 도메인 이름과 IP주소의 변환. 1. 변환(도메인 이름 IP주소)의 필요성 - 상대적으로 잦은 IP 변화에 대한 능동적인 문제 해결. 2. 변환(도메인 이름 -> IP주소) 함수 1 #include struct hostent* gethostbyname(const char* name); (리눅스) #include struct hostent FAR *gethostbyname(const char FAR *name); (윈도우) 3. Struct hostent 4. Struct hostent 구조체 변수 5. 변환(IP -> 도메인 이름) 함수 2 #include struct hostent* gethostbyaddr(const char* addr, int len, int type); (리눅스) #include struct hostent FAR.. 더보기
[2009/06/13] 소켓 연결의 우아한 종료 1. 입력 및 출력 스트림 - 입력 스트림 : 데이터 수신을 위한 스트림 - 출력 스트림 : 데이터 전송을 위한 스트림 2. 소켓 연결 종료의 문제점 - close, closesocket 함수의 호출 : 입력 출력 스트림 완전 종료. - 일방적인 방식의 완전종료는 경우에 따라서 문제가 될 수 있다. 3. Half-close - Half-close : 입력 및 출력 스트림 중 하나의 스트림만 종료하는 행위. 4. Half-close 기능의 함수 [리눅스] #include int shutdown(int s, in how); 상수값 모드 정의 0 SHUT_RD 입력 스트림 종료 1 SHUT_WR 출력 스트림 종료 2 SHUT_RDWR 입 출력 스트림 종료 5. Half-close 기능의 함수 [윈도우] #in.. 더보기
[2009/06/09] UDP 소켓의 성능향상 1. UDP 소켓에서의 connect 함수의 의미 - TCP 소켓에서의 connect 함수의 의미 1) IP와 Port의 할당. 2) 연결 요청 진행(Three-ay handshaking) - UDP 소켓에서의 connect 함수의 이미 1) IP와 Port의 할당. 참고 : connect 함수 호출을 하지 않으면 IP와 Port는 언제 할당 되는가?(sendto 함수가 호출될때 할당 된다.) - TCP/UDP 소켓 공통적으로 지니는 connect 함수의 의미 1) 커널과 소켓의 연결 생성. 2. 일반적인 UDP 클라이언트 - connect 함수를 호출하지 않는 UDP 클라이언트의 데이터 송 수신. 3. 결론! connect 함수 호출이 주는 이점. - 데이터를 주고 받는 속도가 빨라진다. - TCP 소.. 더보기
[2009/06/09] UDP 소켓의 데이터 전송 특징 1. UDP의 이해 - IP를 기반으로 데이터를 전송한다. - 흐름제어(flow control)을 하지 않기 때문에 데이터 전송을 보장 받지 못한다. - 연결설정 및 연결 종료 과정도 존재 않는다. - 연결상태가 존재하지 않는다. 2. UDP의 역할 - Port 정보에 의한 Process의 구분. 3. UDP 기반 서버 / 클라이언트의 구현 - 일반적으로 연결 설정과정을 거치지 않는다. - 데이터를 주고 받기 위한 소켓은 하나만 생성한다. 4. UDP 기반의 데이터 입 출력 함수. - 데이터 전송 함수. int sendto(int sock, const void* msg, int len, unsigned flags, const struct sockaddr * addr, int addrlen) (리눅스) i.. 더보기