2010-11-20 15 views
4

de Possible en double:
In Win32, is there a way to test if a socket is non-blocking?Check est prise bloque (Winsock spécifique)

Voilà comment je mis la prise en mode non-bloquant dans les fenêtres.

 
unsigned long mode = is_blocking ? 0 : 1; 
int ret = ::ioctlsocket(m_Socket, FIONBIO, &mode);


Dans ma bibliothèque complexe que je reçois des verrous occasionnels parce que certaines prises qui lui sont transmises ne sont pas réglés en mode non-bloquant. Donc, je voudrais ajouter et affirmer pouvoir voir où est passé le socket non-bloquant. Le problème est que je ne sais pas comment tester si le socket bloque ou non.



Sur unix, il est simple:

long arg = 0; 
if((arg = fcntl(m_Socket, F_GETFL, NULL)) < 0) { 
    return ERROR; 
} 
bool was_blocking = (arg & O_NONBLOCK) != 0; 



, comment puis-je tester si socket bloque les fenêtres.

grâce

Répondre

5

Windows ne propose aucun moyen de demander si une socket est actuellement fixé à bloquer ou non le blocage.

+0

Merci pour la réponse, c'est exactement ce qui a été ma conclusion, difficile de croire que tous leurs extras avec WSAIoctl au-dessus des sockets bsd plain ne liste pas quelque chose qui peut effectivement être utile. – Pavel