Table des matières du Kit Réseau | Index du Kit Réseau |
Déclarée dans : be/net/NetEndpoint.h
Bibliothèque: libnetapi.so
Allocation: Constructeur uniquement
Plutôt que de remplacer l'architecture réseau actuelle, la classe BNetEndpoint permet d'utiliser à la C++, les fonctions sockets standards. Conséquement toutes les règles d'utilisation s'appliquent, assurez-vous donc de revoir tout ce qui conerne les fonctions C des sockets BSD.
Cependant, les informations sur le protocole ne sont évidemment pas sauvées, à moins que vous n'ajoutiez ces mêmes informations à l'archive. Par exemple, si vous archivez une connection FTP, et que vous la reconstituiez depuis l'archive, le répertoire de travail ou tout téléchargement en cours ne seront pas restaurés.
|
Créer un BNetEndpoint représentant l'extrémité locale d'une connection réseau. Après construction, vous devez appeler InitCheck() pour vous assurer qu'aucune erreur ne s'est produit durant l'initialisation.
L'argument protocol vous permet de spécifier si le BNetEndpoint utilisera une socket de flux (SOCK_STREAM) or une socket de datagramme (SOCK_DGRAM).
Par défault, les entrées/sorties sont bloquantes et la réutilisation d'adresse est désactivée. Vous pouvez changer cela en appelant SetNonBlocking() et SetReuseAddr().
|
Un destructeur typique.
|
Lie le BNetEndpoint à une adresse locale spécifique. Cette adresse peut être spécifiée en utilisant une BNetAddress or un simple numéro de port. Cela sélectionne le port qui gèrera l'extrémité locale de la connection.
Si votre BNetEndpoint utilise un protocole de flux (stream) et que votre BNetEndpoint sera à l'écoute de connections entrantes, vous devez appeler Bind().
Si votre BNetEndpoint de flux est un client, vous n'avez pas besoin d'appeler Bind() mais vous pouvez le faire si vous le désirez.. Cependant, il n'y a aucun avantage particulier à le faire.
Un BNetEnpoint devant accepter les streamsne doit pas être lié.
Les BNetEndpoint de datagrammes qui recevront des données doivent être liés, les BNetEndpoint de datagrammes qui seulement enverront des données n'ont pas besoin d'être lié. Cependant, si un BNetEndpoint doit à la fois envoyer et recevoir des données, il doit être lié.
Si vous ne spécifiez pas une adresse ou un numéro de port (ou un numéro de port de 0), Bind() liera le BNetEndpoint à un port local choisi aléatoirement. Vous pourrez déterminer lequel en appelant LocalAddr().
La seule façon de désassocier un BNetEndpoint d'une adresse ou un port, est de fermer cet endpoint.
VALEUR DE RETOUR
B_OK. L'adresse a été associée au BNetEndpoint avec succès.
|
Ferme la connection, si elle existe. Toute donnée non lue dans un tampon est proprement nettoyée.
|
Ouvre une connection vers le système distant spécifié. L'adresse du système peut être spécifiée soit en utilisant une BNetAddress ou en spécifiant une adresse IP ou le nom de ddomaine et le n° de port. Par exemple, pour se connecter au serveur web de Megaburger S.A votre programme devrait appeler :
status_t err = myEndpoint->Connect("www.megaburger.com", 80); if (err != B_OK) { /* une erreur est survenue */ } else { /* tout va bien, la connection est ouverte */ }VALEUR DE RETOUR
B_OK. La connection a été ouverte sans problème.
|
Error() renvoie un code d'erreur entier concernant la dernière erreur de réception ou de tramsission. Si une fonction d'envoi/réception de données retourne un B_ERROR , vous pouvez en déterminer l'erreur spécifique grâce à Error().
ErrorStr() renvoie un pointeur vers du chaîne de caractères décrivant l'erreur. N'essayez pas de désallouer cette chaîne avec free(), elle ne vous appartient pas.
|
Renvoie un status_t indiquant si une instanciation d'objet s'est ou non, bien passée..
VALEURS DE RETOUR
B_OK. L'instanciation du BNetEndpoint s'est bien effectuée.
|
Renvoie true si des données sont en attente de réception, sinon, renvoie false. Si vous spécifiez un délai d'attente (timeout) autre que 0, la fonction bloquera jusqu'à ce que soit des données soient disponibles ou que le délai expire.
|
Listen() informe le BNetEndpoint de commencer à écouter les demandes de connexions entrantes sur son port local. Ces demandes sont mise en file d'attente; backlog demandes peuvent être mise en attente au maximum à n'importe quel moment. Si plus de demandes sont mises en attente, alors les demandes ultérieures seront refusées jusqu'à ce que de la place se libère dans la file d'attente.
Vous pouvez accepter des connections entrantes an appelant Accept(). Si aucune connection n'est en attente, cette fonction renvoie NULL. S'il y a des connections en attente, alors une nouvelle instance de BNetEndpoint est créée avec la connexion ouverte entre votre port local et le système distant, et cette instance vous est renvoyée.
A vous d'utiliser la nouvelle connexion à votre guise. Quand vous en avez teriné avec votre connexion, vous devez effacer l'estance de BNetEndpoint qui vous a été retournée. Votre thread d'écoute ressemblera typiquement à ça :
long MyListener(void *data) { BNetEndpoint endpoint; if (endpoint.InitCheck() < B_OK) { return -1; } endpoint.Bind(portNumber); /* association au port désiré */
endpoint.Listen(); /* écoute les connexions */ while (keepListening) { BNetEndpoint *connect = NULL; connect = endpoint.Accept(); if (connect) { handle_connection(connect, data); /* appelle une fonction pour bosser */ delete connect; } } endpoint.Close(); }VALEUR DE RETOUR
B_OK. Ca roule.
|
CEs fonctions renvoient une instance de BNetAddress representant le système local ou distant de la connexion. LocalAddr() revnoie l'adresse de la machine locale, et RemoteAddr() (de façon assez dingue) renvoie l'adresse du système distant.
S'il n'y a pas de connexion distante, RemoteAddr() renverra une instance de BNetAddress indiquant une adresse IP de 0.0.0.0.
|
Receive() reçoit un buffer de données en provenance de l'extrémité distante de la connexion. Si aucune connection est établie, B_ERROR est immédiatement renvoyée. On peut recevoir jusqu'à size octets de données.
ReceiveFrom() reçoit le buffer du système distant spécifié par l'argument BNetAddress from . ReceiveFrom() fonctionne seulement si la connection utilise un protocole à datagramme.
LA première forme de chaque fonction envoie un buffer arbitraire de la capacité spécifiée par size, et la seconde forme envoie le contenu d'un BNetBuffer. Quand vous utilisez un BNetBuffer, les données entrantes sont ajoutées à la fin du buffer, de sorte que vous puissiez utiliser le buffer dans une boucle pour stocker les données entrantes par fragments, jusqu'à ce le nombre voulu d'octet ait été lu.
L'argument flags, qui est passé aux fonctions recv() ou recvfrom() de socket.h, est actuellement inutilisé et doit être 0.
Quand vous appelez ces fonctions en mode bloquant (réglage par défaut), elles bloqueront jusqu'à ce que des données soient disponibles en réception, ou qu'un délai d'attente expire. Le délai d'attente est défini en appelant SetTimeout(). Vous pouvez activer ou désactiver le blocage en appelant SetNonBlocking(). Si vous êtes en mode non-bloquant et qu'aucune donnée n'est en attente, ces fonctions retournent 0 immédiatement, indquant l'absence de données.
Ces fonctions renvoient le nombre d'octets effectivement reçus, ou -1 si une erreur s'est produite. Vous pouvez alors appeler Error() pour obtenir l'erreur spécifique qui s'est produite..
|
Send() envoie un buffer de données vers l'extrémité distante de la connection. Si aucune connection est établie, B_ERROR est immédiatement renvoyé. En plus, si le BNetEndpoint est configuré pour utiliser un protocole à datagramme, la fonction échouera à moins que Connect() ait été appelée, puisque cette fonction stocke l'adresse de destination.
SendTo() envoie le buffer sur le système distant spécifiée par la BNetAddress to. SendTo() ne fonctionne que si la connection utilise un protocole à datagramme.
La première forme de chaque fonction envoie un buffer arbitraire de capacité size, et dans la seconde forme, envoie le contenu d'un BNetBuffer.
L'argument flags, qui est passé aux fonctions send() ou sendto() de socket.h, n'est pas utilisé actuellement et doit toujours aloir 0.
Ces fonctions renvoient le nombre d'octets effectivement envoyés, ou -1 en cas d'erreur. Vous pouvez appeler Error() pour avoir plus d'informations sur l'erreur qui s'est produite.
|
SetOption() vous permet de définir n'importe quelle option pour le BNetEndpoint. C'est uen interface à la fonction setsockopt() de la socket sous-jascente.
SetNonBlocking() contrôle si les entrées/sorties doivent ou non être bloquantes. Si enable vaut true, la connection sera non bloquante. Si enable vaut false, la connection bloquera sur les entrées/sorties jusqu'à ce que l'emission soit terminée.
SetReuseAddr() contrôle si les adresses peuvent ou non être réutilisées. Si enable est true, les adresses seront réutilisées. Si enable est false, la connexion ne réutilisera pas les adresses.
Ces fonctions renvoient 0 en cas de succès et -1 autrement.
|
Défini le type de protoocle pour la connexion. Les valeurs possibles pour l'argument protocol sont SOCK_STREAM (pour utiliser un protocole de flux) ou SOCK_DGRAM (pour un protocole à datagrammes).
RETURN CODES
B_OK. Le protocole a été défini avec succès.
|
Défini le délai d'attente pour les appels à Receive() et ReceiveFrom(). Si les entrées/sorties sont en mode bloquant, et que timeout microsecondes passent, la fonction terminera avec une erreur. Par défaut, il n'y a aucun délai d'attente. Vous pouvez indiquer que vous ne voulez pas de délai d'attente en spécifiant -1.
|
Renvoie la socket effectivement utilisé par le BNetEndpoint pour les communications de données.
|
Copie l'instance de BNetEndpoint specifiée par from
dans l'objet du coté gauche, crééant donc une réplique
de l'objet. Si from
est connecté, le duplicata aura également la même connection
ouverte.
Table des matières du Kit Réseau | Index du Kit Réseau |
The BeBook,
...in lovely HTML...
for BeOS Release 5.
Copyright © 2000 Be, Inc. All rights reserved..