====== socket ====== Ouvre une connexion réseau TCP ===== Syntaxe ===== socket ?''options''? host port socket -server command ?options? port ===== Description ===== Cette commande ouvre une socket réseau et retourne un identificateur de canal qui peut être employé dans les appels futurs des commandes comme [[:tcl:read]], [[:tcl:puts]] et [[:tcl:flush]]. A présent seul le protocole réseau TCP est supporté; les versions futures pourront inclure un support pour des protocoles supplémentaires. La commande socket peut être employée pour ouvrir soit le coté client ou serveur d'une connexion, dépendant de si le switch **-server** est spécifié. ==== Sockets clientes ==== Si l'option **-server** n'est pas spécifiée, alors la partie client d'un connexion est ouverte et la commande retourne un identificateur de canal qui peut être utilisé pour la lecture et l'écriture. //port// et //host// spécifient un port pour la connexion; il doit y avoir un serveur qui accepte des connections sur ce port. //port// est un numéro de port entier et //host// est soit un nom qualifié tel que zeolia.chat ou une adresse numérique IP telle que 127.0.0.1. Utilisez localhost pour vous référer à la machine sur laquelle la commande a été appelée. Les options suivantes peuvent être aussi présentes avant //host// pour spécifier des information supplémentaires concernant la connexion : * **-myaddr //addr//** //addr// donne le nom qualifié ou l'adresse IP numérique de l'interface réseau coté client à utiliser pour la connexion. Cette option peut être utile si la machine cliente a plusieurs interfaces réseau. Si l'option est omise alors l'interface coté client sera choisie par le logiciel système. * **-myport //port//** //port// spécifie un numéro de port entier à utiliser pour le coté client de la connexion. Si cette option est omise, un numéro de port client aléatoire sera choisi par le logiciel système. * **-async** L'option **-async** induit une connexion asynchrone pour la socket cliente. Ceci signifie que la socket sera crée immédiatement mais ne peut pas encore être connectée au serveur, quand l'appel de socket retourne. Quand une [[:tcl:gets]] ou [[:tcl:flush]] est fait sur le socket avant que la tentative de connexion ait réussi ou échoué, si la socket est en mode bloquant, l'opération attendra jusqu’à ce que la connexion soit complétée ou échoue. Si la socket est en mode non bloquant et qu'une gets ou flush est fait sur la socket avant que la tentative de connexion ait réussi ou échoué, l'opération retourne immédiatement et fblocked sur le socket retourne 1. ==== Sockets serveur ==== Si l'option **-server** est spécifiée alors la nouvelle socket sera un serveur pour le port indiqué par //port//. Tcl acceptera automatiquement les connections sur ce port. Pour chaque connexion Tcl créera un nouveau canal qui pourra être employé pour communiquer avec le client Tcl appelle alors //command// avec trois arguments supplémentaire: le nom du nouveau canal, l'adresse, en notation réseau, de la machine cliente, et le numéro de port du client. L'option supplémentaire suivante peut aussi être spécifiée avant **host**: * **-myaddr //addr//** //addr// donne le nom qualifié ou l'adresse IP numérique de l'interface réseau du coté serveur à utiliser pour la connexion. Cette option peut être utile si la machine serveur a plusieurs interfaces réseau. Si l'option est omise alors la socket serveur est attachée à l'adresse spéciale INADDR_ANY ainsi elle peut accepter les connections sur une interface quelconque. Les canaux serveurs ne peuvent pas être utilisés pour les entrées ou sorties; leur seul usage est d'accepter de nouvelles connections client. Les canaux créés pour chaque connexion client entrante sont ouvert pour l'entrée et la sortie. Fermer le canal serveur ferme le serveur ainsi aucune nouvelle connexion ne sera acceptée néanmoins, les connections existantes ne seront pas affectées. Les sockets serveurs dépendent du mécanisme d’événement Tcl pour réagir aux nouvelles connections ouvertes. Si l'application n'entre pas dans la boucle d’événement, par exemple en appelant la commande [[:tcl:vwait]] ou l'appel de fonction C, alors aucunes connections ne seront acceptées ==== Options de configuration ==== La commande [[:tcl:fconfigure]] peut être utilisée pour consulter plusieurs options de configuration en lecture seule pour les canaux socket: * **-error** Cette option lit le statut d'erreur courant de la socket donnée. Ceci est utile quand vous avez besoin de déterminer si une opération de connexion asynchrone a réussi. S'il y a eu une erreur, le message d'erreur est renvoyé. Si il n'y avait pas d'erreur, une chaîne vide est renvoyée. * **-sockname** Cette option retourne une liste de trois éléments, l'adresse, le nom de machine et le numéro de port pour la socket. Si le nom de machine ne peut pas calculé, le second élément est identique à l'adresse, le premier élément de la liste. * **-peername** Cette option n'est pas supportée par les sockets serveur. Pour les sockets clients acceptés, cette option retourne une liste de trois éléments; ce sont l'adresse, le nom de machine et le port auxquels la socket peer est connectée ou liée. Si le nom de machine ne peut être calculé, le second élément de la liste est identique à l'adresse, son premier élément. ===== Exemples ===== ===== Voir aussi ===== {{tag>tcl}}