Comment définir Keepalive sur Windows Server 2008

J'ai win32 application dans laquelle winsock est utilisé pour la communication TCP/IP.
Je suis en train de keepalive valeur avec WSAIoctl fonction et c'est de travail normalement avec windows XP.

Mais sur Win. Server 2008 WSAIoctl échoue, et WSAGetLastError retourne 10022(arguments non valides) qui n'a aucun sens.

Mon code qui définit keepalive est suit;


//set per-connection keep-alive option 
tcp_keepalive keepAliveSettings; 
keepAliveSettings.onoff = 1; 
keepAliveSettings.keepalivetime = 500; 
eepAliveSettings.keepaliveinterval = 25;

int lastError = WSAIoctl(m_soc.chns[0], SIO_KEEPALIVE_VALS, &keepAliveSettings, sizeof(keepAliveSettings), NULL, 0, &BytesReturned, NULL, NULL); if(lastError == SOCKET_ERROR) { lastError = WSAGetLastError(); Logger::Error("Setting keepalive failed ErrCode %d\n",lastError); }

EDIT:

J'ai trouvé la solution, peut-être que ça peut aider quelqu'un d'autre qui sont confrontés à un même problème. Je tente de mettre keepalive juste après la async. appel de connexion, mais maintenant, je suis en train d'après l'achèvement de l'appel de connexion et cela a résolu le problème.

De http://msdn.microsoft.com/en-us/library/ee470551(v=VS.85).aspx

Sur Windows Vista et les versions ultérieures, l'
SO_KEEPALIVE option de socket ne peut être
défini à l'aide de la fonction setsockopt quand
le socket est dans un état
pas un état transitoire. Pour TCP, les
SO_KEEPALIVE option de socket doit être
soit avant la fonction de connexion
(se connecter, ConnectEx, WSAConnect
WSAConnectByList, ou WSAConnectByName)
est appelé, ou après la connexion
la demande est réellement terminé. Si l'
fonction de connexion a été appelé
en mode asynchrone, cela nécessite
d'attente pour la connexion d'achèvement
avant d'essayer de définir la SO_KEEPALIVE
option de socket. Si une application
les tentatives de définir la SO_KEEPALIVE
option de socket lorsqu'une connexion
la demande est encore en cours, les
fonction setsockopt échoue et
retour WSAEINVAL.

InformationsquelleAutor AFgone | 2010-07-04