none
WSASend 질문 RRS feed

  • 질문

  • 안녕하세요
    해당 문서를 보면
    If you are using I/O completion ports, be aware that the order of calls made to WSASend is also the order in which the buffers are populated. WSASend should not be called on the same socket simultaneously from different threads, because it can result in an unpredictable buffer order.

    이란 해당 설명이 있는데요.

    궁금한것은 서로 다른 Thread 에서 같은 Socket 으로 Overalpped 를 이용해 WSASend 를 할경우 어떤 문제가 있는지 입니다.

    Copy 한 글을 보면 unpredictable buffer order 만 언급 되고 있는데요..

    order 와 상관이 없다면 서로 다른 Thread 에서 같은 Socket 으로 Send 를 해도 문제가 없는지 도움 부탁드리겠습니다.

    감사합니다~^^

    2013년 7월 2일 화요일 오전 6:49

답변

  • 받는쪽에서 어떻게 받든지 무조건 보내기만 하겠다면 그렇게 사용하셔도 됩니다. 하지만, 프로그램이

    항상 정상적으로 동작한다고 보장할수는 없습니다. Recv 함수보다 Send 함수가 오류 발생률이 적기 때문에

    문제를 비켜간다고 해서 그렇게 사용하라고 권장할수는 없습니다.

    코드를 어떻게 구성하느냐에 따라, 설명에서 나온것처럼 단순히 오더에 문제만 생기는것이 아니라 받는쪽에서

    데이터가 누락된다거나 타임아웃이 발생하는 문제도 생길수 있습니다.

     

    여러개의 스레드를 사용하시려면 소켓도 여러개 만드시거나 반드시 하나의 소켓을 사용해야한다면

    CRITICAL_SECTION 와 같은 기술을 사용해서 충돌하지 않도록 하는것이 좋습니다.

    • 답변으로 표시됨 EYEDENTITY 2013년 7월 3일 수요일 오전 6:06
    2013년 7월 2일 화요일 오후 5:57
    중재자

모든 응답

  • 받는쪽에서 어떻게 받든지 무조건 보내기만 하겠다면 그렇게 사용하셔도 됩니다. 하지만, 프로그램이

    항상 정상적으로 동작한다고 보장할수는 없습니다. Recv 함수보다 Send 함수가 오류 발생률이 적기 때문에

    문제를 비켜간다고 해서 그렇게 사용하라고 권장할수는 없습니다.

    코드를 어떻게 구성하느냐에 따라, 설명에서 나온것처럼 단순히 오더에 문제만 생기는것이 아니라 받는쪽에서

    데이터가 누락된다거나 타임아웃이 발생하는 문제도 생길수 있습니다.

     

    여러개의 스레드를 사용하시려면 소켓도 여러개 만드시거나 반드시 하나의 소켓을 사용해야한다면

    CRITICAL_SECTION 와 같은 기술을 사용해서 충돌하지 않도록 하는것이 좋습니다.

    • 답변으로 표시됨 EYEDENTITY 2013년 7월 3일 수요일 오전 6:06
    2013년 7월 2일 화요일 오후 5:57
    중재자
  • 도움 주셔서 감사합니다. ^^

    2013년 7월 3일 수요일 오전 6:02