MSG_WAITALL
От: einstein  
Дата: 11.12.03 12:19
Оценка:
Как я понимаю, на платформе win32 не поддерживается флаг MSG_WAITALL в
вызове recv?
Корректно ли будет написать следующую обертку:

#ifdef WIN32
inline int recv_waitall(SOCKET sock, char* buf, int len, int flags)
{
int result;
int totalread = 0;
do
{
result = ::recv(sock,buf,len,flags);
if (result == -1 || result == 0)
return totalread;
totalread += result;
}
while (totalread != len);
return totalread;
}
#endif

И далее использовать это в коде например так:
#ifdef WIN32
if (recv_waitall(sock, (char*)&r2h, sizeof(rpc2_header), MSG_NOSIGNAL)
== -1)
#else
if (::recv(sock, &r2h, sizeof(rpc2_header), MSG_WAITALL |
MSG_NOSIGNAL) == -1)
#endif
throw (int) errno;

Еще вопрос — что такое MSG_NOSIGNAL и почему в виндовсе он вроде как
определен, но не описан в MSDN ??
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.