GetQueuedCompletionStatus 가 2번 오는 현상??

jic5760의 이미지

안녕하세요.
IOCP을 이용해 NamedPipe소스를 짜고 있습니다.

그런데 좀.. 이상한 문제가 있어 질문드립니다.

NamedPipe Client 4개를 만들어놓고 연결하고 일정시간후에 연결을 끊는 작업을 하며 테스트를 하고 있습니다.
(그 중간에는 데이터 송신도 합니다.)

그런데 client들을 CloseHandle를 순차적으로 하는데 처음 4번까지는 서버쪽 GetQueuedCompletionStatus에서 ERROR_BROKEN_PIPE을 리턴하고 클라이언트 정보를 정리하는 작업을 합니다.
그런데 의문의 5번째 GetQueuedCompletionStatus응답이 발생합니다...

cbEventErrorHandler: 015BB9E0: 109
ClientDel: 232 / internal:c000014b
cbEventErrorHandler: 015BBF18: 109
ClientDel: 252 / internal:c000014b
cbEventErrorHandler: 015BC450: 109
ClientDel: 264 / internal:c000014b
cbEventErrorHandler: 015BC988: 109
ClientDel: 276 / internal:c000014b
cbEventErrorHandler: 015BC988: 109
ClientDel: 276 / internal:c000014b

109 란 숫자는 GetQueuedCompletionStatus의 LastError값입니다. (ERROR_BROKEN_PIPE)
internal는 ReadFile을 하던 Overlapped 객체의 Internal값이구요.

대체 같은 결과가 왜 2번 오는지 모르겠습니다....ㅠㅠ

위에 클라이언트 4개라고 했는데 3개로 해도 이벤트가 4개가 오네요..

이런 경험 해보신 분 계신가요? 뭐가 문제일까요?
소스는 복잡해서 첨부하지 않았습니다..

아 참고로 지금 Worker Thread는 1개입니다.
테스트해보니 클라이언트에서 데이터를 전송하지 않으면 문제가 발생하진 않네요..

jic5760의 이미지

ReadFile의 Return이 TRUE일 경우 Queueing안되는줄 알고 즉시 처리 후 다시 ReadFile을 하도록 했는데 이게 문제였네요...
ReadFile가 True을 Return해도 GetQueuedCompletionStatus에서 처리가 가능하군요...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.