recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Pourquoi la connexion socket est-elle réinitialisée?

Écrivez votre propre serveur http, le serveur écoute le socket et le thread handle_request gère les requêtes dynamiques PHP du navigateur.

... tandis que(1){ if(-1 == (client_fd = accept(sockfd, (struct sockaddr *) &client_sock, &sin_size))) err_exit("accepter"); if(pthread_create(&ntid, NULL, (void *)handle_request, &client_fd) != 0) err_exit("pthread_create"); } fermer(sockfd); renvoie 0 ;

Après avoir communiqué avec php-fpm dans handle_request, j'ai obtenu le résultat de l'exécution msg. msg contient deux lignes d'informations d'en-tête de réponse http, une ligne vide et le corps de la réponse (le résultat de l'exécution du code php), et ensuite je n'ai besoin que de pour ajouter une ligne de réponse, un paquet de réponse http est construit et finalement envoyé au client.

... /* Envoyer la réponse */ sprintf(en-tête, "%s 200 OK\r\n", hr->version); //printf("%s%s\n", en-tête, msg); send(client_fd, en-tête, strlen(en-tête), 0); envoyer(client_fd, msg, contentLength, 0); gratuit (msg); fermer(client_fd);

Ce qui est étrange, c'est que lorsque j'y accède dans le navigateur, les résultats de l'exécution de PHP défilent, puis il me demande que la connexion a été réinitialisée

Firefox ne parvient pas à établir une connexion avec le serveur à l'adresse 127.0.0.1:8899.

Lors d'un test sur telnet, un message de réponse http complet peut être reçu

Essayer 127.0.0.1...
Connecté à 127.0.0.1.
Le caractère d'échappement est '^]'.
OBTENIR /index.php HTTP/1.1
HTTP/1.1 200 OK
X-Powered-By : PHP/5.5.9-1ubuntu4.21
Type de contenu : texte/html

bonjour tout le mondeConnexion fermée par un hôte étranger.

programme php

<?php echo "bonjour tout le monde" ;
某草草某草草2795 Il y a quelques jours570

répondre à tous(1)je répondrai

  • 世界只因有你

    世界只因有你2017-05-16 13:02:37

    Votre problème de conception est très sérieux. Vous devez &client_fd传到pthread_create很可能会引起连接丢失,因为你无法保证handle_request在下一个accpetl'implémenter avant qu'il réussisse. Un autre problème est que votre conception est terrible, au moins l'ensemble du pool de threads sera affecté...

    .

    répondre
    0
  • Annulerrépondre