Hey !
Je suis en train de travailler avec des sockets TCP mais non BSD, fourni par Keil pour son compilateur sur ARM. Ils font partis de la bibliothèque TcpNet.
Je n'ai à ma disposition que ces fonctions et je n'ai notamment pas de fonction accept(). Quand je crée un socket, je lui passe un callback et ce callback est appelé chaque fois qu'il y a un "évènement", en particulier quand il y a une question entrante sur un socket à l'écoute. Si j'accepte cette connexion, le socket à l'écoute devient le socket de communication avec le client et n'est donc plus à l'écoute.
Je dois utiliser ces fonctions pour implémenter des fonctions d'une API d'une surcouche, qui elle se base plutôt sur des sockets type BSD (que je ne peux pas utiliser pour des raisons techniques propres au projet).
Je cherche donc à comprendre comment fonctionnent les fonctions connect() et accept() des sockets BSD. connect() se connecte à un serveur et est bloquante tant que le serveur ne répond pas (ou timeout). accept() accepte une connexion en attente ou en attend une nouvelle.
Mettons qu'on ait :
- un serveur possède un socket à l'écoute mais n'appelle pas accept()
- un client utilise connect()
J'ai lu sur le net que le serveur pouvait accepter la connexion entrante sans pour autant qu'il y ait forcément eu un appel à accept(). Est-ce vrai ? Si la réponse est non, cela veut dire qu'on ne peut pas envoyer de données au serveur tant que celui-ci ne nous a pas connecté à un socket dédié. Si la réponse est oui, on pourrait donc envoyer des données au serveur avant son appel à accept() mais ça me parait un peu bizarre... Les données n'iraient nul part ? Comment ces 2 fonctions s'articulent t-elles ? L'une attend-elle l'autre pour se débloquer ?
Merci d'avance pour vos réponses !
Partager