2010-11-22 5 views
0

J'utilise WinHTTP pour envoyer des données à un script de serveur Web et dans certains cas, j'ai besoin du serveur pour tuer les données entrantes (comme cela n'est pas requis) mais toujours retourner une réponse au client app. J'utilise stream_socket_shutdown(STREAM_SHUT_RD) à partir de la fin du serveur pour mettre fin aux données entrantes, puis renvoyer une réponse normale. Le problème réside avec WinHTTP, j'obtiens une réponse négative de WinHttpWriteData() comme prévu et arrête d'envoyer des données mais quand j'appelle WinHttpReceiveResponse() il renvoie faux et GetLastError() renvoie ERROR_WINHTTP_CONNECTION_ERROR.Continuer connexion WinHTTP après l'arrêt de l'écriture

Est-il possible de réinitialiser la condition d'erreur interne pour WinHTTP? Ou une autre façon de recevoir la réponse après que la connexion a été rompue par le serveur?

Merci, J

+0

Je ne pense pas que vous pouvez simplement fermer une socket au milieu d'une requête HTTP et attendre que tout fonctionne; Je suis à peu près sûr que cela brise la spécification du protocole. – Luke

Répondre

0

Si vous tuez la connexion du côté du serveur, de réception sur le client échouera. C'est ainsi que WinHTTP est conçu pour fonctionner.

Votre serveur ne peut-il pas ignorer les données entrantes indésirables?

Pourquoi votre client envoie-t-il toujours lorsque le serveur s'attend à lui envoyer une réponse? Peut-être que le protocole impliqué dans votre utilisation HTTP peut être ajusté pour réduire l'envoi de données indésirables du client dans ce scénario.

+0

La connexion n'est pas totalement tuée, juste le canal de lecture (écrire du client), j'espérais que cela échouerait seulement l'appel de WinHttpWriteData() et pas toute la connexion. Le serveur peut (et abandonne) les données non désirées mais parfois il peut être plusieurs Mo et il serait plus efficace d'arrêter l'envoi des données en premier lieu. Le facteur qui décide si les données ne sont pas requises est un en-tête HTTP, il est donc nécessaire de renvoyer une réponse immédiatement. – JWood

Questions connexes