SOCKET: 5개의 글
1. 소켓의 옵션 아래는 프로토콜 레벨과 옵션 이름들이다. 1-1. SOL_SOCKET : 일반적인 옵션 SO_SNDBUF : 송신버퍼 크기 설정 SO_RCVBUF : 수신버퍼 크기 설정 SO_REUSEADDR : 지역 주소(IP,Port) 재사용여부 SO_KEEPALIVE : 주기적으로 연결 여부 확인 SO_BROADCAST : 브로드캐스팅 허용여부 SO_DONTROUTE : 라우팅 테이블 참조과정 생략여부 SO_OOBINLINE SO_ERROR SO_TYPE : 소켓의 타입(변경 불가) 1-2. IPPROTO_IP : IP 패킷 관련 IP_TOS : Type of Service 변경 IP_TTL : Time-To-Live 변경 IP_MULTICAST_TTL : 멀티캐스트 패킷의 TTL 변경 IP_MU..
1. hostent 구조체 struct hostent { char *h_name; //공식 도메인 이름 char **h_aliases; //공식 이외 도메인 이름들 int h_addrtype; //주소정보 체계(IPv4: AF_INET, IPv6: AF_INET6) int h_length; //IP주소의 크기를 담는다. (IPv4는 4) char **h_addr_list; //도메인 이름에 대한 IP주소가 정수 형태로 반환될 때 이 멤버 변수를 이용 } * 예제 2. 도메인 관련 API #include 아래 함수들을 호출하면 소켓 라이브러리가 DNS서버에 조회하여 IP주소나 도메인명을 찾는 기능을 제공한다. 이와같은 정보를 hostent 구조체에 담아서 반환해주는 것이다. 개발자가 IP주소를 알아내기위해..
1. Half-close란? 1-1. 일방적인 close()의 문제점 A호스트와 B호스트가 서로 TCP통신하고 있다. 그러나 A호스트가 일방적으로 close()로 연결을 종료하면 B호스트는 A호스트로 데이터를 보낼게 있어도 보낼 수 없다. 따라서 일방적으로 송수신 스트림을 끊어버리는 건 문제가 있으므로, 하나의 스트림(주로 송신을 닫고, 수신을 열어둠)만 닫는 것을 Half-close 기법이라고 한다. 1-2. Half-close가 필요한 이유 서버는 단순히 데이터를 연속해서 전송하면 되지만, 클라이언트는 언제까지 데이터를 수신해야 하는지 알 수 없다. 주기적으로 read()함수를 호출하다가는 블로킹(호출된함수가 반환되지 않음) 상태에 빠질 수도 있다. 그러므로, 데이터전송이 끝났음을 알리는 EOF를 날..
TCP소켓에 이어서 쓴다 1. UDP소켓이란? UDP소켓은 비연결지향형 소켓이다. TCP에 있는 흐름제어가 없다. 특징으로는 전송순서에 상관없이 가장 빠른 전송,경로를 지향한다. 데이터 손실의 우려가 있고 한번에 전송할 수 있는 데이터의 크기가 제한된다. 데이터의 경계가 존재한다. TCP소켓과 반대라고 생각하면 쉽다. 데이터의 경계가 존재한다는 건, 3번 write()했으면 3번 read()를 해서 수신해야한다는 것이다. 이러한 특징때문에 UDP는 주로 고속의 데이터 전송이나 데이터가 조금 손실되도 상관없는 곳에 쓰인다. 대표적인 예가 동영상 스트리밍을 들 수 있겠다. 중학교 때 스타좀 (많이)해봤는데.. 스타크1을 한사람이면 특히 UDP란 글자가 익숙할거다. 게임플레이어간에 고속통신을 위하여 UDP로 ..
TCP소켓 프로그래밍의 기초 0. 다루는 소켓에 대하여 일반적으로 사용되는 INET(TCP/IP 를 이용한 인터넷 주소 패밀리)와 TCP(데이터 연결지향형, 신뢰성이 높은 Stream) 에 대해서 다룬다. 리눅스(centos7) 환경을 기준으로 다룬다. 이번에도 느낀건데 이런식으로 넘버링하면서 공부하면 뇌에 효율적으로 저장되는거같다.. 1. 소켓이란? 직관적인 예로 전구는 소켓을 이용하여 전기를 공급받는다. 이처럼 컴퓨터도 네트워크에서 데이터를 얻기위해 소켓을 사용할 수 있다. 소켓 프로그램은 서버-클라이언트의 2개의 프로그램으로 쌍을 이룬다. 서버는 서비스를 제공하는 프로그램이고, 클라이언트는 서버에 서비스를 요청하는 프로그램이다. TCP 소켓이란? TCP소켓은 연결지향형이다. 중간에 데이터가 소멸되지..