Le serveur utiliser le même socket pour envoyer la réponse au client? comment?

Je suis en utilisant des sockets de Berkeley (à la fois: domaine de l'Internet et du domaine Unix) et je me demandais si le serveur peut utiliser les mêmes prises pour la lecture de la demande et la rédaction d'une réponse au client. Ou si le client en créer un autre socket attendre pour la relecture et le serveur connecter après le traitement du message reçu.

Par le chemin, je parle de la connexion orientée prises de courant (flux de sockets TCP, ...).

C'est la simplification de code du serveur (j'ai omettre la vérification des erreurs sur le système appelle ici juste pour des raisons de simplicité):

int main() {

    int server_socket, connected_socket;
    struct sockaddr_in server_addr;
    char buf[1024];
    char aux[256];
    int bytes_read;

    server_socket = socket(AF_INET, SOCK_STREAM, 0);    

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(1234);
    bind(server_socket, &server_addr, sizeof(server_addr))

    listen(server_socket, 5)

    connected_sodket = accept(server_socket, 0, 0);
    do {
        bzero(buf, sizeof(buf));
        bytes_read = read(connected_socket, buf, sizeof(buf));        
    } while (bytes_read > 0);          

    /* Here I want to use connected_socket to write the reply, can I? */

    close(connected_socket);       

    close(server_socket);

    return (EXIT_SUCCESS);
}

Et c'est la simplification de code client (j'ai omettre la vérification des erreurs sur le système appelle ici juste pour des raisons de simplicité):

int main() {

    int client_socket;
    struct sockaddr_in server_addr;

    client_socket = socket(AF_INET, SOCK_STREAM, 0);

    hp = gethostbyname("myhost");
    server_addr.sin_family = AF_INET;
    memcpy(&server_addr.sin_addr, hp->h_addr_list[0], hp->h_length);
    server_addr.sin_port = htons(1234);

    connect(client_socket, &server_addr, sizeof(server_addr));

    write(client_socket, MSG, sizeof(MSG));

    /* Here I want to wait for a response from the server using client_socket, can I? */

    close(client_socket);

    return (EXIT_SUCCESS);
}

Puis-je utiliser connected_socket dans le serveur et client_socket dans le client de transmettre un message de réponse en retour? Ou dois-je utiliser l'adresse du client je reçois dans le serveur quand à "accepter" pour vous connecter à une prise dans le client?

J'ai essayé en utilisant de lecture/wrint dans le client/serveur où le commentaire est affiché mais de cette façon, les deux programmes de maintenir bloqué, il semble être une impasse.

Grâce ins avance!
Ce qui concerne.

OriginalL'auteur mmutilva | 2009-01-21