Daha fazla bilgi ioctlsocket(socket,FIONREAD,&bytes_available)
ve ioctlsocket(socket,FIONREAD,&bytes_available)
.
Ancak, işletim sisteminin sizin için ne kadar veri alacağını garanti etmesi gerekmediği konusunda uyarıda bulunun. Bu nedenle, çok fazla veri bekliyorsanız, veriyi okurken ve depolarken daha iyi okumanız daha iyi olacaktır. Bir şeyleri işlemek için gereken her şeye sahip olana kadar kendi tamponunuzda.
Bunu yapmak için normalde ne yapılır, sadece bir seferde parçalarını okumak gibi
char buf[4096];
ssize_t bytes_read;
do {
bytes_read = recv(socket, buf, sizeof(buf), 0);
if (bytes_read > 0) {
/* do something with buf, such as append it to a larger buffer or
* process it */
}
} while (bytes_read > 0);
Ve sen veri bekleniyor orada oturmak istemiyorum, sen select
veya içine bakmak gerekir Verilerin okunmaya hazır olup olmadığını belirlemek için epoll
ve soket için hiçbir zaman engellemediğinizden emin olmak istiyorsanız soketler için O_NONBLOCK
bayrağı çok kullanışlıdır.
gelen veriyi sokete "devam eden bayt akışı" veya "tcp paketleri dizisi" olmalı? – jondinham
azami bayt sayısıyla (program tarafından idare edilebilir) çift taraflı bir iş yapacaktır, bence biz gerçekten veri ile uğraştığımızda, ikinci kez – jondinham
Doğru okuduk, bu yüzden ilk yöntem tercih edilir, Gbps hızlarında çalışıyorsunuz, daha sonra hiç fark etmeyeceksiniz .. – hexist