[Résolu] Passage serveur multiconnexion -> mono-connexion

respawnrespawn Membre
août 2008 modifié dans API AppKit #1
Bonjour,

j'ai un soucis que je ne pensais vraiment pas avoir. J'ai un programme C qui gère plusieurs connexion TCP à  l'aide de fork() mais je voudrais maintenant supprimer ce dernier (et donc passer en mono-connexion). Voici la partie concernée de mon code originel :
<br />...<br />if (listen(father_socket, 3) == -1) {<br />		printf(&quot;Error : cannot wait a connection&#092;n&quot;);<br />		exit(1);}<br /><br />    while (1) {<br /><br />		son_socket=accept(father_socket, NULL, NULL);<br />		<br />		if (son_socket == -1) {<br />			printf(&quot;Error : cannot accept the connection&#092;n&quot;);<br />			exit(1);}<br />      <br />		if (fork() == 0) { &nbsp; // Son process for multiple connection<br />			close(father_socket);     &nbsp; // Close the father socket<br />			handle_request(son_socket); // Request treatment<br />			exit(EXIT_SUCCESS);<br />                }<br />			<br />		close(son_socket);         &nbsp; // Close the son socket<br />	//int *wait_value;<br />	//wait(wait_value);<br />    } /* while (1) */<br />    /* NOTREACHED */<br />    return 0;


je pensais pouvoir passer en mono-connexion simplement en supprimant le
if (fork() == 0)
mais non, rien ... j'ai essayé en enlevant le
close(father_socket);
, en enlevant le while (1) mais rien ...

je ne comprends vraiment pas. La connexion semble se faire entre mon client et mon serveur mais impossible d'envoyer un paquet ...

Une/Des idée(s) ?

Merci beaucoup

Réponses

  • respawnrespawn Membre
    11:10 modifié #2
    Pas de réponse ... et si, je l'ai trouvée :)

    Voici le code
    if (listen(father_socket, 3) == -1) {<br />		printf(&quot;Error : cannot wait a connection&#092;n&quot;);<br />		exit(1);}<br /><br />&nbsp; &nbsp; while (1) {<br /><br />		son_socket=accept(father_socket, NULL, NULL);<br />		<br />		if (son_socket == -1) {<br />			printf(&quot;Error : cannot accept the connection&#092;n&quot;);<br />			exit(1);}<br />&nbsp; &nbsp; &nbsp; <br />		handle_request(son_socket); // Request treatment<br />			<br />		close(son_socket);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // Close the son socket<br /><br />&nbsp; &nbsp; }
    

    En ajoutant en return; dans la fonction handle_resquest si (n = read) == 0

    Et voilou

    A plus
Connectez-vous ou Inscrivez-vous pour répondre.