본문 바로가기

SMALL

C++/Socket 통신

(7)
WSAEWOULDBLOCK(10035), WSAEALREADY(10037) 오류 및 RST 패킷 분석과 해결 방법 포스팅 계기 네트워크 프로그래밍을 하다 보면, 소켓 통신에서 예상치 못한 오류가 발생하는 경우가 많다. 특히, 논블로킹 소켓을 사용할 때 자주 마주치는 WSAEWOULDBLOCK(10035)와 WSAEALREADY(10037) 오류는 많은 개발자들에게 혼란을 준다. 최근 현업에서 TCP 클라이언트-서버 환경을 구축하는 과정에서 이 오류를 해결해야 하는 상황이 발생했다. 여기에 더해, 와이어샤크(Wireshark) 패킷 분석을 통해 서버 측에서 RST (Reset) 패킷이 발생하는 문제도 발견하였다. 그래서 해당 포스팅을 작성하게 되었다. 이번 포스팅에서는 WSAEWOULDBLOCK(10035) 및 WSAEALREADY(10037) 오류의 개념과 해결 방법을 정리하고, RST 패킷이 발생하는 원인과 해결책..
고성능 네트워크 프로그래밍 기법 – 실무에서 반드시 알아야 할 최적화 기술 포스팅 계기  이전 포스팅(2025.02.27 - [C++ 개발이야기/Socket 통신] - 보안과 암호화된 소켓 통신 - C++)에서 다룬 멀티스레드 소켓 프로그래밍과 비동기 소켓 프로그래밍은 네트워크 개발을 할 때 필수적인 기법들이었다. 하지만 네트워크 트래픽이 많아지고 성능이 중요한 환경에서는 단순히 멀티스레드를 사용하는 것만으로는 한계가 있는 것이 사실이다. 특히, 실시간 처리가 중요한 게임 서버, 금융 시스템, 분산 시스템에서는 보다 최적화된 네트워크 프로그래밍 기법이 필요하다. 이번 포스팅에서는 고성능 네트워크 프로그래밍의 핵심 기법과 함께 실무에서 사용되는 최적화 기법을 C++ 예제 코드와 함께 설명하도록 하겠다. 고성능 네트워크 프로그래밍이란?고성능 네트워크 프로그래밍이란 최소한의 리소스로..
보안과 암호화된 소켓 통신 - C++ 포스팅 계기 이전 글에 이어 2025.02.26 - [C++ 개발이야기/Socket 통신] - 비동기 소켓 프로그래밍 - C++  비동기 소켓 프로그래밍을 다룬 이후, 네트워크 보안의 중요성도 함께 짚고 넘어갈 필요가 있다고 판단했고 나 또한 잘 모르는 지식이라 공부할 겸 해당 포스팅을 작성하게 되었다. 소켓을 통한 데이터 전송은 다양한 보안 위협에 노출될 수 있으며, 특히 민감한 정보를 주고받을 때 암호화가 필수적이라고 생각한다. 이번 포스팅에서는 보안과 암호화된 소켓 통신의 개념을 설명하고, C++을 이용하여 이를 구현하는 방법을 설명하겠다.보안과 암호화된 소켓 통신 개념소켓 통신이란 네트워크를 통해 데이터를 주고받는 방식이다. 그러나 기본적인 소켓 통신은 데이터를 평문(Plain Text)으로 전송..
비동기 소켓 프로그래밍 - C++ 포스팅 계기 이전 포스팅에 2025.02.26 - [C++ 개발이야기/Socket 통신] - 멀티스레드 기반 소켓 프로그래밍 : 서버 성능 극대화를 위한 필수 개념 - c++에 이어 어떤 심화적인 이야기를 하면 좋을까 생각하다 해당 주제를 선택하게 되었다. 네트워크 프로그래밍에서 동기 방식은 클라이언트의 요청을 순차적으로 처리하기 때문에 성능이 제한될 수 있다. 특히, 다수의 클라이언트가 동시에 접속하는 경우 멀티스레드 방식으로 해결할 수 있지만, 스레드 관리 비용이 증가하는 문제가 있다. 이를 해결하는 대안으로 비동기 소켓 프로그래밍이 있다. 이번 글에서는 비동기 소켓 프로그래밍의 개념과 구현 방법을 다뤄보도록 하겠다.비동기 소켓 프로그래밍 개념 비동기 소켓 프로그래밍은 논블로킹(non-blocking..
멀티스레드 기반 소켓 프로그래밍 : 서버 성능 극대화를 위한 필수 개념 - c++ 포스팅 계기 저번 포스팅 2025.02.25 - [C++ 개발이야기/Socket 통신] - C++에서 TCP/UDP 소켓 프로그래밍 입문에 이어 조금 심화과정에 관해서 이야기를 논하고 싶어 해당 글을 쓰게 되었다. 네트워크 프로그래밍에서 서버는 다수의 클라이언트 요청을 동시에 처리해야 하는 경우가 많다. 단일 스레드로 요청을 처리하면 하나의 클라이언트가 긴 시간을 소요할 경우 다른 클라이언트의 요청이 지연될 수 있다. 이를 해결하기 위해 멀티스레드 기반 소켓 프로그래밍이 필요하다. 이번 글에서는 멀티스레드를 활용한 소켓 프로그래밍 개념과 구현 방법을 설명하겠습니다.멀티스레드 기반 소켓 프로그래밍에 대한 개념 멀티스레드의 필요성병렬 처리: 여러 스레드가 동시에 작업을 처리할 수 있어, 여러 클라이언트가 요..
C++에서 TCP/UDP 소켓 프로그래밍 입문 포스팅 계기 금주에 오랜만에 장기 휴가를 쓰게 되었다. 이에 따라 하루에 2개씩 글을 쓰는 게 내 목표다. 그중에 네트워크 프로그래밍에 관한 글을 쓰고 싶어 해당 포스팅을 하게 되었다. 네트워크 프로그래밍은 현대 소프트웨어 개발에서 필수적인 요소다. 특히, 서버와 클라이언트 간의 데이터 통신을 다루는 TCP와 UDP는 다양한 애플리케이션에서 사용되고 있다. 이번 글에서는 C++을 활용하여 TCP 및 UDP 소켓을 구현하는 방법을 소개하고, 이를 통해 네트워크 프로그래밍의 기초를 이해하는 데 도움이 될 수 있는 내용을 작성해 보겠다.개념 설명TCPTCP(Transmission Control Protocol)연결 지향 프로토콜로, 신뢰성 있는 데이터 전송을 보장패킷이 순서대로 도착하며, 손실된 패킷은 재전송..
TCP CLOSE_WAIT, FIN_WAIT_2 에러 - C++ 포스팅 계기 최근에 같이 개발을 하고 있는 타 업체 개발자가 client가 비정상 종료되었을 때 프로그램을 다시 On 하면 TCP Connection이 되지 않는다고 도움을 요청을 받았다. 그때 발생한 TCP Error가 Server 측에서는 FIN_WIAT_2가 발생하였고, Client 측에서는 FIN_WAIT_2가 발생했다. 그래서 그때 왜 그런 문제가 발생하는지 또한, 어떻게 코드적으로 해결할 수 있는지 이야기하고자 한다. ※ 아래는 Window 환경에서 내 PC에서 TCP Connection 상태를 볼 수 있는 명령어다.CMD 명령어 : netstat -nao | find "TCP"TCP 통신이란? TCP는 Server와 Client 간에 데이터를 주고받을 때 신뢰성을 기반으로 전송하기 위한 프로..

LIST