C++/C++ 정리6 Hacker rank day17 hacker rank 30 day challange 에서 예외 처리에 대한 문제가 나왔다. 예외 처리를 제대로 해본적이 없어서 헷갈렸는데 인터넷을 보고 std::exception 클래스를 상속받아 what() 함수를 override 했다. class CustomException : public std::exception{ public: const char * what() const noexcept override { return "n and p should be non-negative"; } }; 2021. 9. 27. Socket 4 linger TCP의 단절 감지를 위해서 사용. typedef struct linger { u_short l_onoff; u_short l_linger; } LINGER, *PLINGER, *LPLINGER; l_onoff : 0이면 해당 소켓을 닫고, Graceful Shutdown을 수행하지만 종료작업의 완료 시점은 알 수 없음 0이 아니면 해당 소켓을 열어놓음 l_linger : l_onoff가 0이 아닐때만 유효하며 l_linger가 0이 아니라면 명시된 시간동안 정상종료 되지 않으면 비정상 종료되고 버퍼의 데이터는 버려짐 l_linger가 0이면 비정상 종료되어 남아있던 데이터는 버려지며 Graceful Shutdown을 수행하지 않음 이러한 경우 FIN을 전달하지 않고 RTS를 상대 호스트로 .. 2021. 3. 2. Socket 3 WSAIoctl 소켓의 모드를 제어하는 함수 int WSAAPI WSAIoctl( INSOCKET s, INDWORD dwIoControlCode, INLPVOID lpvInBuffer, INDWORD cbInBuffer, OUTLPVOID lpvOutBuffer, INDWORD cbOutBuffer, OUTLPDWORD lpcbBytesReturned, INLPWSAOVERLAPPED lpOverlapped, INLPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); s : 소켓 dwIoControlCode : 함수가 수행하는 연산의 제어코드 lpvInBuffer : 입력 버퍼에 대한 포인터 cbInBuffer : 입력버퍼의 크기(lpvInBuffer의 .. 2021. 2. 25. Socket 2 WSARecv 연결된 소켓으로부터 데이터를 받을때 사용 int WSAAPI WSARecv( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); s : 연결된 소켓 lpBuffers : WSABUF 구조체의 포인터, 각 WSABUF구조체는 buffer 포인터와 길이등을 가지고 있다 dwBufferCount : lpBuffers에 사용된 WSABUF의 개수 lpNumberOfBytesRecvd : receive 과정이 끝나고 받은 .. 2021. 2. 15. Socket 1 WSAStartup Winsock DLL을 사용하기 위해 초기화 int WSAAPI WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); mVersionRequested : Windows Sockets의 버전을 지정할때 사용 lpWSAData : WSADATA 구조체의 포인터로, Windows Sockets의 구현 정보를 받아온다 MAKEWORD(lowbyte, highbyte) : Windef.h의 매크로중 하나 WSAStartup의 결과가 0이 아니면 Winsock DLL을 사용할 수 없는 등 에러가 발생한 것 WSADATA구조체는 Windows Socket의 구현정보를 담을때 사용 WSASocketW 소켓을 만들고 특정 transport-servi.. 2021. 2. 9. C++ STL 정리 *알고리즘 공부하면서 계속 레퍼런스 찾기 귀찮아서 하나씩 정리할 생각입니다 range 안에서 최소/최대값의 주소값을 반환 min_element() max_element() vector = v; int max = *max_element(v.begin(), v.end()); int min = *min_element(v.begin(), v.end()); 벡터의 중복 원소 제거 unique 사용 unique는 중복제거를 하고, 마지막 원소의 iterator 값을 리턴 vector v; sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); 벡터 부분합 partial_sum #include partial_sum(a[i].begin().. 2020. 6. 29. 이전 1 다음