본문 바로가기

Network9

RAW 소켓 TCP, UDP 서버 & 클라이언트 프로그램과 달리 RAW 소켓은 사용자가 직접 구현해야 되는 소켓이라고 볼 수 있다. TCP, UDP는 소켓 관련 라이브러리 및 운영체제에서 프로토콜 헤더를 작성하여 데이터를 전송하기 때문에 직접 프로토콜 헤더를 작성하지 않아도 데이터를 송수신할 수 있었다. 단순하게 데이터를 송수신하는 기능을 구현하기에는 이와 같이 프로토콜 헤더를 자동으로 만들어주는 것이 편리하다. 하지만 프로토콜 헤더를 직접 다루어야 하는 경우도 있기 때문에 RAW 소켓을 공부할 필요가 있다. RAW소켓이란 소켓을 생성할 때 지정하는 옵션을 이용하여 데이터를 전송할 때 직접 프로토콜 헤더를 만들고 수신할 때도 프로토콜 헤더를 포함하여 수신하겠다는 의미로 소켓을 생성하는 것이다. 추가로 윈도우에서 RA.. 2017. 6. 12.
윈도우 소켓 에러처리 (FormatMessage) 윈도우 환경에서는 FormatMessage 함수와 WSAGetLastError 함수를 이용하여 에러정보를 확인할 수 있다. 소켓 관련 함수를 사용하다가 발생한 에러 번호를 확인하기 위해서는 WSAGetLastError() 함수를 이용해야 한다. #include int WSAGetLastError(void); 이 함수를 이용하여 에러 번호를 리턴하게 되는데, 그 번호를 이해하기는 어렵다. 이 정수형 값을 이해할 수 있는 문자열 형태로 변환해는 주는 함수가 바로 FormatMessage() 함수이다. DWORD WINAPI Format Message( _In_ DWORD dwFlags, _In_opt LPCVOID lpSource, _In_ DWORD dwMessageID, _In_ DWORD dwLangu.. 2017. 6. 11.
WSAStartup 함수 (Window) Header #include Function Prototype int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); 윈도우에서는 리눅스와는 다르게 소켓 라이브러리를 사용하기 위해서는 어떤 버전의 소켓을 사용할지 소켓 라이브러리를 초기화한 다음에 소켓을 사용해야 한다. 첫 번째 인자는 프로그램에서 사용할 소켓이 버전 정보를 전달한다. 두 번째 인자는 WSADATA 구조체의 주소값을 전달하는데 이 곳에 소켓의 세부 정보가 저장된다. 2017. 3. 15.
Network - closesocket함수 Window & Linux #include Function Prototype int closesocket(_In_ SOCKET s); 윈도우 환경에서는 소켓을 사용한 다음에 소켓 디스크립터를 닫을 때는 closesocket함수를 이용하여 소켓 디스크립터를 닫아야한다. 간단하게만 알아두셔도 됩니다. MSDN에서는 A descriptor identifying the socket to close. 라고 간단 명료하게 명시하였습니다. 추가적으로 에러없을 땐 0이 반환 그 외에는 SOCKET_ERROR를 반환하게 됩니다. 2017. 3. 13.
Network - close 함수 Windows & Linux #include Function Prototype int close(int fd); close함수는 리눅스에서 전달받은 파일 디스크립터를 닫는데 사용된다. 리눅스는 소켓과 파일 디스크립터를 함께 공통으로 사용하는 특징이 있는데, 파일을 닫을 때 close함수가 사용될 수 있을 뿐만 아니라 소켓 디스크립터를 닫을 때에서 close함수를 사용할 수 있다 2017. 3. 12.
Network - recvfrom 함수 Window #include Linux #include #include Function Prototype ssize_t recvfrom(int sockfd, void* buf, size_t len, int flags, struct sockaddr* src, socklen_t* addrlen); recvfrom 함수는 recv함수와 동일하게 데이터를 수신받기 위해서 사용되는 함수이다. ( sendto 와 send ) 이 또한 차이점이 있는데, 눈치 있는 분들은 비연결 연결 을 떠올리셨을 것이다. recvfrom함수는 비연결지향성으로 SOCK_DGRAM으로 생성된 소켓 연결에서 데이터를 수신한다. 첫 번째인자부터 세 번쨰 인자까지 기존 recv함수와 동일하다. http://nroses-taek.tistory.. 2017. 3. 12.