본문 바로가기

기타/아카이브5

[Network Basic] 3. TCP Connection Multiplexing TCP connection 소켓 API는 기본적으로 blocking이라, accept() 하면 일단 block되고 본다. recv()로 data를 받을 때도 물론. 사용자가 1명이면 Blocking I/O가 문제가 되진 않겠지만, 실제로는 그럴리가 없다. 여러 connection을 동시에 다루는 기술이 필요하다. Polling Non-blocking Sockets 소켓 자체가 non-blocking operation을 할수 있게 하는 방법 중 fcntl 함수를 호출하는 것인데, 단순히 모든 active socket을 순서대로 확인하는 polling 구조로 되어있어 자원 낭비가 심하며, 구현해야 할게 추가적으로 발생한다. 그래서 일반적으로 Polling 방식을 잘 쓰지 않는다. Fo.. 2020. 6. 11.
[Network exercise] 2. TCP 소켓을 이용하여 HTTP 서버 만들기 TCP 소켓을 이용하여 서버의 현재 시간을 알려주는 HTTP 서버를 만들어보자. 우선 만든 결과 프로그램은 다음과 같다. #if defined(_WIN32) // windows #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0600 #endif #include #include #pragma comment(lib, "ws2_32.lib") #else // linux #include #include #include #include #include #include #include #endif #if defined(_WIN32) #define ISVALIDSOCKET(s) ((s) != INVALID_SOCKET) #define CLOSESOCKET(s) closesocket(s.. 2020. 5. 27.
[Network Basic] 2. Socket Socket 소켓은 communication link의 endpoint이고, 어플리케이션은 소켓을 통해 모든 네트워크 정보를 전송한다. Unix 계열에선 POSIX 소켓을 주로 사용한다. Unix Socket, BSD Socket, POSIX Socket은 같은 것을 의미한다. 윈도우 소켓 API는 Winsock 으로 불린다. Berkeley socket에 compatible 하도록 구성되어있다. 소켓은 두가지 타입으로 분류된다. - Connection-oriented - Connectless Connectionless라는게 실제로 Connection이 존재하지 않는 상태에서 데이터를 전송한다는 의미는 아니다. 요즘 시대에 자주 쓰이는 프로토콜은 두가지이다 - TCP -> Connection-orient.. 2020. 5. 27.
[Network exercise] 1. Local address 목록을 나열하기 Windows 에서 Local address 목록 나열하기 windows 환경에서 minGW 컴파일러를 이용하여 동작하는 코드이다. Visual Studio C에서도 잘 동작한다. #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0600 #endif #include #include // for network adapter #include // for network adapter #include #include #include #pragma comment(lib, "ws2_32.lib") // ignored when using MinGW -> add -lws2_32 when compile #pragma comment(lib, "iphlpapi.lib") // ignored w.. 2020. 5. 26.