СAsyncSocket передача данных
От: yuru  
Дата: 16.03.06 15:16
Оценка:
Для пересылки файла с использованием асинхронных сокетов
использую след. фрагмент кода
char buffer[4096];
DWORD dwRead;
// Read in 4096-byte blocks,
do
{

dwRead = mailFile.Read(buffer,4096);
if(Send(buffer,dwRead) == SOCKET_ERROR)
{
//ошибка
return false;
}
}
while (dwRead > 0);

При этом выбрасывается ошибка (Операция на незаблокированном сокете не может быть завершена немедленно).
Что это значит? При пересылке небольших файлов ошибки не возникает. Проблемы начинаются при размере
более 90 kb.
Re: СAsyncSocket передача данных
От: crashed США  
Дата: 16.03.06 15:21
Оценка:
Здравствуйте, yuru, Вы писали:

Y>Для пересылки файла с использованием асинхронных сокетов

Y>использую след. фрагмент кода
Y>char buffer[4096];
Y>DWORD dwRead;
Y>// Read in 4096-byte blocks,
Y>do
Y>{

Y>dwRead = mailFile.Read(buffer,4096);

Y>if(Send(buffer,dwRead) == SOCKET_ERROR)
Y>{
Y> //ошибка
Y> return false;
Y>}
Y>}
Y>while (dwRead > 0);

Y>При этом выбрасывается ошибка (Операция на незаблокированном сокете не может быть завершена немедленно).

Y>Что это значит? При пересылке небольших файлов ошибки не возникает. Проблемы начинаются при размере
Y>более 90 kb.
WSAEWOULDBLOCK? Значит, ничего не пришло. Сокет-то неблокирующий. Значит, надо подождать еще.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: СAsyncSocket передача данных
От: yuru  
Дата: 18.03.06 15:00
Оценка:
Здравствуйте, crashed, Вы писали:

C>WSAEWOULDBLOCK? Значит, ничего не пришло. Сокет-то неблокирующий. Значит, надо подождать еще.


Тогда у меня два вопроса:
1 Почему не всегда нужно ждать?
2 Каким образом организовать ожидание? неужели sleep(n)?
Re: СAsyncSocket передача данных
От: eklmn  
Дата: 18.03.06 15:30
Оценка:
Hello yuru,

y> Что это значит? При пересылке небольших файлов ошибки не возникает.

y> Проблемы начинаются при размере

ошибка при записи или при чтении?
попробуйте использовать select или аналог из комплекта WSA*
Posted via RSDN NNTP Server 2.0
Re[3]: СAsyncSocket передача данных
От: crashed США  
Дата: 20.03.06 11:41
Оценка:
Здравствуйте, yuru, Вы писали:

Y>Здравствуйте, crashed, Вы писали:


C>>WSAEWOULDBLOCK? Значит, ничего не пришло. Сокет-то неблокирующий. Значит, надо подождать еще.


Y>Тогда у меня два вопроса:

Y>1 Почему не всегда нужно ждать?
Потому что не всегда на входе ничего нет!
Y>2 Каким образом организовать ожидание? неужели sleep(n)?
Можно и так. А можно что-нибудь полезное поделать. Но лучше sleep(n) (или аналоги), чтобы дать другим потокам/процессам поработать.
А вообще-то для таких вещей есть select().
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: СAsyncSocket передача данных
От: Michael Chelnokov Украина  
Дата: 20.03.06 12:41
Оценка:
Здравствуйте, yuru, Вы писали:

Y>Для пересылки файла с использованием асинхронных сокетов


Судя по вопросам, рано вам еще асинхронные использовать.
Используйте синхронные (CSocket, наверное, называется в MFC).
Re[2]: СAsyncSocket передача данных
От: Аноним  
Дата: 21.03.06 09:02
Оценка:
Если я не ошибаюсь то при использовании асинхронных сокетов практически всегда возвращается подобная ошибка даже на не блокирующем сокете попробуй использовать функции WSA... c соответствующей моделью ввода вывода на сокетах
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.