Вот пытаюсь переписать один скрипт с руби на си, но к сожалению с руби вообще не знаком, а с сокетами очень плохо знаком...сокет монитором увидел такую вещь, что после WSASend идет сначала WSARecv который принимает 4 байта которые содержат размер принимаемого пакета а потом идет WSARecv который принимает уже сам пакет каким образом это реализуется подскуажите пожалуйста...
Сформулируй свой вопрос точнее. Сейчас он похож на "что использовать, чтобы огурцы ложкой банка майонеза". вот тут вообще мозг взорвать можно. И расставь запятые.
RET И что? Ты вопрос то читал? Ему нет разницы что идет за WSASend/recv. И вообще судя по всемму у ТС проблемы еще и с алгоритмизацией и си в том числе Код (Text): DWORD size; char* rbuff; char* sbuf; ;initialize send buffer *sbuf=some; DWORD received; WSASend(...sbuf...); WSARecv(...&size...&received); if (received==4) { rbuff=malloc(*size) if (rbuff) { WSARecv(...rbuff...&received); if (received==*size) { //packet getted } } } ?
punxer А разве таким образом он не примет сразу пакет?Мне ведь надо сначала получить размер буфера а потом его принять
BreakHeart сокеты в руби такие же как и в POSIX, с небольшими косметическими изменениями. AFAIK WSARecv/WSASend -- это тот же POSIX только зачем-то переименованный. Какие могут быть возникать проблемы при переписывании кода с ruby на C -- непонятно.
в продолжение темы... С реквами я разобрался, но тут встал другой вопрос так же сокет спай показывает что используется ф-ия WSAEnumNetworksEvents но в тоже время не используется WSAWaitForMultipleEvents...Разве так может быть?и если может быть то перед WSARecv надо проверять на FD_READ или нет?
Очередная проблема появилась...Делаю сенд-рид OpenPrinterEx а затем делаю рид хендла принтера, пакеты идентичные летаю тем что скрипт шлет но почему-то мне не прилетает пакет с хенделом, только ацк приходит после рида, а скрипту нормально все прилетае в чем может быть проблема?