Как я должен чисто вырваться из цикла recv? - PullRequest
4 голосов
/ 30 сентября 2011

Я использую функцию recv в цикле для получения сетевых данных, но скажем, я хочу прекратить получать данные в середине цикла. Я мог бы просто разорвать цикл, но это не очень чистый способ прекратить получать данные.

Так есть ли способ полностью прекратить получение данных, или просто разрыв цикла? Это HTTP GET / POST запросы.

Вот упрощенно я использую:

do {
  nDataLen = recv(mySocket, data, BUFFSIZE, 0);
  if (nDataLen > 0)
  {
    /* Process Data */
    // I'd like to break out of the loop
    // if something is found when processing the data
    // But, I want to do this cleanly.
  }
} while (nDataLen != 0);

Ответы [ 3 ]

3 голосов
/ 30 сентября 2011

Выход из цикла recv не закрывает соединение. Все, что происходит, это то, что вы перестаете вызывать recv и, следовательно, перестаете читать данные из сокета. Данные от партнера по-прежнему будут поступать в ваш сокет. Если вы хотите полностью завершить работу, позвоните close в дескрипторе файла сокета.

0 голосов
/ 30 сентября 2011

Если вам не нужна розетка, закройте ее и вырвитесь из цикла.

0 голосов
/ 30 сентября 2011

Выход из цикла - это способ прекратить звонить recv.Другой - включить логическое значение should_stop и проверить его в условии цикла.Однако вы должны получить все, что осталось в гнезде, и правильно закрыть его.

...