Проблема с Soket на с++ 6.0 (у меня нет выбора и приходится работать на данной версии языка) и что я делаю не так?
Есть Soket через который происходит общение с внешним устройством, оно отвечает. Для постоянного опроса устройства создаётся поток иначе в при его опросе происходит deadlock. Предварительно отпрвляется сообщение, чтобы он начал присылать данные. При опросе коммандой recv в данном потоке возвращаемое значение читаемоего сообщения вместо 5 выдает 0xffff. Ещё для уточнения, комманды для работы с сокетом и вся работа с ним происходит только в dll (таково требование). В остальных ситуациях всё работает. Поток создаётся в программном интерфейсе и вызываются функции из dll(на других языках подобный трюк работал, только вызывались функции не из dll). Нужно ли создавать данный поток в dll или можно вызывать функции из потока и возвращать потом полученные значения в главный поток? Просто впервые с таким столкнулся.
Армянское Радио, в другой версии программы всё работает, но там обращение к сокету происходит напрямую, не через dll. А мне нужно как-то организовать опрос сокета на постоянной основе. Я может и задаю глупый вопрос, но жуткая усталость и малый опыт работы с сокетами на с++ (я работал с SerialPort на c#, там было всё легче) не позволяет до конца осознать проблему. Общение с ним работает, но вот в этом месте я не понимаю. Может не с того потока стучусь в буфер?!
fobos58, проблема с потоками и сокетами может возникнуть только в том случае, когда это делается одновременно из разных потоков. Не имея ваших исходников, помочь вам будет очень тяжело.
fobos58, давай немного разберемся. Твое описание очень тяжело воспринимается.
Открыть TCP сокет у тебя получается ведь? В каком режиме ты его открываешь? Результат работы recv и send ты проверяешь ведь по всем правилам?
Вероятно, выходит что отправить команду на устройство у тебя получается, а вот получить ожидаемый результат - нет?