소켓핸들이 한개로 WSARecv로 수신대기중인 상태에서, WSASend로 데이터를 보내게 되면 WSARecv로 대기중이던게 취소됩니다. 이때 발생하는 에러가 님이 말씀하신 ERROR_OPERATION_ABORTED입니다.
이 에러는 발생해도 끊어지거나 뭐 별다른 일은 일어나지 않습니다.
아마도 데이터를 보낼려고 하는데, 그 핸들이 사용중이니까 일단 사용중인것을 취소하고 보내지 않나 싶네요
하여간, 이 에러가 발생하지 않게 하기 위해서는 핸들을 2개 사용하면 되구요..
WSADuplicateSocket 이나 DuplicateHandle 를 사용해서 복사해서 한개는 수신을 한개는 송신을 하면 됩니다.
저는 accept에서 발생한 핸들을 수신용으로, 복사해서 나온 핸들을 송신용으로 사용하고 있습니다.
새로운 핸들이 발생하면 CreateIoCompletionPort 에 추가를 해주던데
복사된 핸들은 CreateIoCompletionPort 여기에 추가해주지 않았거든요.. 그래도 동작하는데 이상이 없네요
저는 DuplicateHandle을 사용해서 복사를 하는데, 아래와 같이 했습니다.
int hr=DuplicateHandle(GetCurrentProcess(), (HANDLE)hsocket, GetCurrentProcess(), (LPHANDLE)&hwritesocket, NULL, FALSE, DUPLICATE_SAME_ACCESS);
반응형
'Thread > Windows' 카테고리의 다른 글
[스크랩][Thread][Windows] Sleep과 SwitchToThread의 차이 (0) | 2014.09.29 |
---|---|
[Thread][Windows] DuplicateHandle (3) | 2013.10.19 |
[Thread][Windows] Thread 기본에 대한 글. 링크 (0) | 2013.10.13 |
[Thread] InterlockedCompareExchange() 동작 (0) | 2012.10.22 |
[스크랩] C/C++ volatile 키워드 (0) | 2012.10.22 |
[스크랩] Interlocked 함수들.. (0) | 2012.10.19 |
[Thread] WaitForSingleObject 에 대해 (0) | 2012.10.18 |
[Thread] GetCurrentThread Function (0) | 2012.10.18 |
[Thread] DuplicateHandle함수 (0) | 2012.10.18 |
[Thread] __declspec(thread) (0) | 2012.10.18 |