Re: IOCP question: ordering of data



A good example of such is iocp sample in PSDK which use additional(s)
send(s) in advance in the same way as receive
Arkady

"Skywing [MVP]" <skywing_NO_SPAM_@xxxxxxxxxxxxxxxxxxx> wrote in message
news:uxIUyKhsHHA.4916@xxxxxxxxxxxxxxxxxxxxxxx
It can do partial completion immediately for nonblocking-sockets mode.
For blocking sockets or for overlapped operation, it's all or nothing.

--
Ken Johnson (Skywing)
Windows SDK MVP
http://www.nynaeve.net
"Alexander Nickolov" <agnickolov@xxxxxxxx> wrote in message
news:unFwtaesHHA.4572@xxxxxxxxxxxxxxxxxxxxxxx
Data sequencing synchronization is up to you.

On a side note, WSASend will never return with a partial
success - it's all or nothing. This doesn't even make sense
for overlapped I/O though, since your send is not completed
yet. It's the completion notification that's all or nothing. But,
if you do get a partial completion, that means all subsequent
sends will complete with failure (the socket is toast).

--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@xxxxxxxx
MVP VC FAQ: http://vcfaq.mvps.org
=====================================

"Ulrike Urban" <ULUR@xxxxxxxxxxxxx> wrote in message
news:5dn3o7F32o847U1@xxxxxxxxxxxxxxxxxxxxx
Hi,

I'm messing around with TCP programming using iocps (XP Pro)

If multiple iocp-worker threads are used, how data-corruption can be
avoided.

Example:

- Thread #1 WSASends a block of data.
This send could not completely be done by winsock, so the completion
notification comes back with according byte counts, (bytes_sended <
bytes_to_be_sended).

Thread #1 tries to WSASend the rest of the data-block

- just before issuing the WSASend, Thread #1 is preempted by Thread #2
Thread #2 WSASends another block of data.
Here data corruption may/will occur.

In such a scenario (it is never guaranteed that winsock is able to send
all data of a WSASend-Call, the app may be required to re-send the rest)
how can multiple threads work properly?
My understanding is that if I issue only ONE WSASend on one socket, data
integrity can be guaranteed.
This implies that multiple sends issued from multiple threads to one
socket does not make sense. Multiple sends from one thread would be ok.
But then there is no advantage using multiple threads...





.



Relevant Pages

  • Re: IOCP question: ordering of data
    ... WSASend will never return with a partial ... Microsoft MVP, MCSD ... If multiple iocp-worker threads are used, ... My understanding is that if I issue only ONE WSASend on one socket, ...
    (microsoft.public.win32.programmer.networks)
  • Re: IOCP question: ordering of data
    ... in theory WSASend can do partial writes for blocking ... Microsoft MVP, MCSD ... If multiple iocp-worker threads are used, ... My understanding is that if I issue only ONE WSASend on one socket, ...
    (microsoft.public.win32.programmer.networks)
  • IOCP question: ordering of data
    ... If multiple iocp-worker threads are used, ... Thread #1 tries to WSASend the rest of the data-block ... In such a scenario (it is never guaranteed that winsock is able to send all data of a WSASend-Call, the app may be required to re-send the rest) ... My understanding is that if I issue only ONE WSASend on one socket, ...
    (microsoft.public.win32.programmer.networks)
  • Re: IOCP question: ordering of data
    ... WSASend will never return with a partial ... If multiple iocp-worker threads are used, ... In such a scenario (it is never guaranteed that winsock is able to send ... My understanding is that if I issue only ONE WSASend on one socket, ...
    (microsoft.public.win32.programmer.networks)
  • Re: SetSockOpt with SO_REUSEADDR parameter
    ... no concept that allows you to create multipe sockets with the same port number. ... happening is that you are throwing away the old socket and replacing it with the new ... That is not the same as creating multiple sockets with the same port #. ... Because I will send real-time video frame, I use UDP socket. ...
    (microsoft.public.vc.mfc)