WSASend问题?急!
在完成端口中我投递了WSASend后用GetQueuedCompletionStatus得到了完成的消息。
但是我判断传输的字节数量发现,有的WSASend没投递的很成功,于是我就把BUFFER的指针重新指向未投递成功的那部分BUFFER。但是总是失败,我知道肯定是我的数据结构设计的有问题!
typedef enum _tagIO_OPERATION
{
ClientIoAccept,
ClientIoRead,
ClientIoWrite
} IO_OPERATION, *PIO_OPERATION;
typedef struct _tagPER_IO_OPERATION_DATA
{
OVERLAPPED Overlapped;
WSABUF DataBuf;
char Buffer[DATA_BUFSIZE];
IO_OPERATION OperationType;
int State;
DWORD RecvBytes;//只表示投递接受未成功的字节数,成功完成后全部清0
DWORD SendBytes;//只表示投递发送未成功的字节数,成功完成后全部清0
} PER_IO_OPERATION_DATA, * PPER_IO_OPERATION_DATA;
我想问的是在我的PER_IO_OPERATION_DATA结构体中,一个 char Buffer[DATA_BUFSIZE];
够了吗?是否该给WSASend和WSARecv都分配一个???
假如WSASend和WSARecv都各有一个,如下
char SendBuffer[DATA_BUFSIZE];
char RecvBuffer[DATA_BUFSIZE];
我在GetQueuedCompletionStatus后假如发现该WSASend未发送的很完整。我
将SendBuffer中的数据未发的部分重发的时候,会不会被新的投递过来的WSASend将SendBuffer中的数据冲掉??(每个SOCKET都只有一个结构体)
如果这样的话我该怎么做?难道是为每个投递的WSASend都分配一个BUFFER???
只有这么多分了。。。