inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

이벤트 기반 비동기 파일 입/출력 (예제 포함)

이벤트 기반 비동기 파일 입/출력 (예제 포함)

해결된 질문

364

dohyun_lim

작성한 질문수 67

0

 안녕하세요 선생님

	DWORD dwRead;
	OVERLAPPED aOl[3] = { 0 };
	HANDLE aEvt[3] = { 0 };

	//세 번의 비동기 쓰기 완료를 확인하기 위한 이벤트 객체를 생성한다.
	for (int i = 0; i < 3; ++i)
	{
		aEvt[i] = ::CreateEvent(NULL, FALSE, FALSE, NULL);
		aOl[i].hEvent = aEvt[i];
	}

	//비동기 쓰기가 시작될 지점을 기술한다.
	//두 번째 쓰기는 세 번째 쓰기보다 나중에 이루어질 가능성이 높다.
	aOl[0].Offset = 0;					//파일의 시작.
	aOl[1].Offset = 1024 * 1024 * 128;	//5MB
	aOl[2].Offset = 16;					//16바이트

	//세 번의 비동기 쓰기를 순차적으로 수행한다.
	for (int i = 0; i < 3; ++i)
	{
		printf("%d번째 중첩된 쓰기 시도.\n", i);
		::WriteFile(hFile, "0123456789", 10, &dwRead, &aOl[i]);
		//정상적인 경우 쓰기 시도는 지연(보류)된다!
		if (::GetLastError() != ERROR_IO_PENDING)
			exit(0);
	}

여기서 dwRead가 얼마나 쓰였는지 확인하는 바이트수를 나타낸다고 하는데 만약 쓰고 싶다면

	//세 번의 비동기 쓰기가 완료되기를 대기한다.
	DWORD dwResult = 0;
	for (int i = 0; i < 3; ++i)
	{
		dwResult = ::WaitForMultipleObjects(3, aEvt, FALSE, INFINITE);
		printf("-> %d번째 쓰기 완료.\n", dwResult - WAIT_OBJECT_0);
	}

	sizeof("0123456789") == dwRead;

이런식으로 마지막에 비교할때 쓰이는건가요?

socket.io udp iocp tcpip

답변 1

0

널널한 개발자

마지막 비교는 잘못된 비교 입니다. sizeof("문자열")은 sizeof(const char*)와 같습니다. 64비트 환경이라면 8입니다. 참고하시기 바랍니다. :)

recv, send 리턴값 질문

0

77

2

스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?

0

96

2

수업과 관련해서 읽어볼 만한 책 있나요?

0

111

1

서버가 끊어버리는것에 대한 질문

0

121

2

TCP 의도적 장애 테스트 질문

0

159

2

shutdown()을 호출하는 이유

0

165

1

프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!

0

153

2

"파일 송신 서버 제작" 강의 질문입니다!

0

151

2

대표적인 장애 유현 2

0

131

2

대표적인 TCP 장애 유현

0

161

2

이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?

0

120

2

개발환경 질문이 있습니다.

0

137

1

TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!

0

221

2

메모리 관련 문제로 질문드립니다.

0

187

2

테스트 환경 질문드립니다!

0

168

2

ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.

0

419

2

하트비트 시 서버에서의 연결 종료

0

451

2

강사님 질문 드립니다.

0

249

1

소켓 입/출력 설계 정리

0

450

1

멀티스레드 기반 서버 관련 질문..!

0

412

2

빅 엔디언과 리틀 엔디언

0

378

2

TIME_WAIT 관련 문의드립니다.

0

226

1

강사님 강의자료 인쇄용으로 부탁드립니다.

0

288

1

bind 함수 관련 궁금증

0

357

2