본문 바로가기
C++/C++ 정리

Socket 3

by COCO1337 2021. 2. 25.

WSAIoctl

소켓의 모드를 제어하는 함수

int WSAAPI WSAIoctl(
  	IN	SOCKET                             s,
  	IN	DWORD                              dwIoControlCode,
  	IN	LPVOID                             lpvInBuffer,
  	IN	DWORD                              cbInBuffer,
  	OUT	LPVOID                             lpvOutBuffer,
  	IN	DWORD                              cbOutBuffer,
  	OUT	LPDWORD                            lpcbBytesReturned,
  	IN	LPWSAOVERLAPPED                    lpOverlapped,
  	IN	LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

s : 소켓

dwIoControlCode : 함수가 수행하는 연산의 제어코드

lpvInBuffer : 입력 버퍼에 대한 포인터

cbInBuffer : 입력버퍼의 크기(lpvInBuffer의 크기)

lpvOutBuffer : 출력 버퍼에 대한 포인터

cbOutBuffer : 출력버퍼의 크기(lpvOutBuffer의 크기)

lpcbBytesReturned : 출력시 실제로 받는 바이트 수치

lpOverlapped : WSAOVERLAPPED 구조체의 포인터

lpCompletionRoutine : 입력 완료시 호출된 완료 루틴의 포인터

 

DisconnectEx와 AcceptEx를 사용할 수 있도록 준비


AcceptEx

새 연결을 만들어 accept 하고, 로컬과 리모트의 주소, 클라이언트에게 받은 첫번째 데이터 블록을 리턴

BOOL AcceptEx(
  SOCKET       sListenSocket,
  SOCKET       sAcceptSocket,
  PVOID        lpOutputBuffer,
  DWORD        dwReceiveDataLength,
  DWORD        dwLocalAddressLength,
  DWORD        dwRemoteAddressLength,
  LPDWORD      lpdwBytesReceived,
  LPOVERLAPPED lpOverlapped
);

sListenSocket : Listen 상태에 있는 소켓, 해당 소켓에 오는 연결 시도를 기다린다

sAcceptSocket : 들어오는 연결을 받는 소켓, 연결되거나 bound 되지 않아야 함

lpOutputBuffer : 새로 들어온 연결에서 받은 첫번째 데이터 블록의 버퍼. 서버의 로컬주소, 클라이언트의 리모트 주소

dwReceiveDataLength : lpOutputBuffer로 받은 실제 데이터의 길이

dwLocalAddressLength : 로컬 주소 정보의 바이트 수

dwRemoteAddressLength : 리모트 주소 정보의 바이트 수

lpdwBytesReceived : DWORD 의 포인터, 받은 바이트의 갯수

lpOverlapped : OVERLAPPED 구조체

 

에러 없다면 TRUE, 에러 발생시 FALSE를 리턴하고 WSAGetLastError 함수를 호출해 에러 정보를 볼 수 있다.

 

AcceptEx 함수가 성공하면

1. 새로운 커넥션이 accept 되고

2. 커넥션의 로컬, 리모트 주소가 반환되며

3. remote에서 보낸 첫번째 데이터 블록을 받는다.

반응형

'C++ > C++ 정리' 카테고리의 다른 글

Hacker rank day17  (0) 2021.09.27
Socket 4  (0) 2021.03.02
Socket 2  (0) 2021.02.15
Socket 1  (0) 2021.02.09
C++ STL 정리  (0) 2020.06.29

댓글