есть два процесса(сервер и клиент) так вот когда клиент отсылает данные через send они как бы принимаются но там все байты 0 recv возвращает что все хорошо GetLastError() тоже. но данные посланы через send не 0!! эта функ на стороне сервера работает (запускается для каждого клиента) Код (Text): void cl(void*p){ ClientThread *m=(ClientThread *)p; char buf[255]={0}; HANDLE h[1]={WSACreateEvent()}; int err=WSAEventSelect(m->Socket,h,FD_WRITE); err=GetLastError(); SockReader R(m->Socket); SockWriter W(m->Socket); printf ("Client Thread is run\n"); int b=1; while (b) switch(WSAWaitForMultipleEvents(1,h,false,WSA_INFINITE,false)){ case(WSA_WAIT_EVENT_0):{ recv(m->Socket,&buf[0],1,MSG_OOB); if (buf[0]==0){ b=0;break;}; recv(m->Socket,&buf[1],(int)buf[0],MSG_OOB); send(m->Socket,&buf[0],(int)buf[0]+1,MSG_OOB); break; }; } WSACloseEvent(h); _endthread(); }; а этой функ пишет клиент серверу Код (Text): int SockWriter::Write(char *buf,int len,bool iswait){ int s=len; for ( ;len>0;){ len-=send(Socket,buf,len,MSG_OOB); if (iswait==false) break; }; return s-len; }; клиент и сервер в аттаче.
что у всех работает? задание сервера все что получает обратно отсылать(это все в процедуре cl находится). а получает он 0(
неплохо бы проверять коды возврата recv/send и если оно меньше нуля смотреть на GetLastError(). у вас запросто может быть такая ситуация что recv() вернула ошибку - следовательно в буфере осталось то что там было при инициализации (скорее всего нули) - send тоже вернул ошибку и ничего не послал назад, а вы про это так и не узнали. дальше не смотрела.
Та капец recv возвращает 1, GetLastError 0. Да и вообще у меня винда в qemu. на ней нет нет антивирусов и и подобного. recv именно 0 пишет (((
И именно 1 возвращает, если ещё раз вызвать recv() то GetLastError возвратит 10035, а recv () -1. Сейчас попробую ещё использовать после recv WSAGetOverlappedResult() может чем то поможет.