Отсутствуют ли какие-либо данные? - PullRequest
1 голос
/ 25 декабря 2010

Вот некоторый код, цитируемый Douglas.E.Comer 4th edition.Эта программа отправит обратно все полученные данные.

...
while((len = recv(conn, buff, BUFFERSIZE,0)) >0) // receive data
        send(conn, buff, len, 0); // send it back
...

Мне интересно, что если некоторые данные поступят, когда код выполняется в функции send (..), они пропустят эти данные?Потому что функция recv () не выполняется.Если данные не пропущены, где хранятся данные?И кем?

Спасибо ...

Ответы [ 2 ]

3 голосов
/ 25 декабря 2010

Входящие данные буферизуются системой до тех пор, пока в следующий раз не будет вызвана функция recv().Эти данные, которые еще не были прочитаны, хранятся в буферах внутри операционной системы, а не внутри вашего приложения.Вы не будете «пропускать» входящие данные, используя такой цикл.

1 голос
/ 25 декабря 2010

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

...