Jump to content

error -1 de send() au noyau


Recommended Posts

Bonjour,

J'utilise la librairie ipsec-tools-0.5.2 sous FreeBSD 6.0. J'utilise le code de ipsec-tools pour envoyer des données au noyau par la fonction pfkey_send(). Cette fonction fait appel à la fonction send(int so, msg, int len). so : descripteur de la socket, msg : données à envoyer au noyau, len : taille des données (taille de msg). Il y a quelque chose que je ne comprends pas.

Tout se passe bien lorsque j'utilise le code en l'état. J'ai voulu rajouter des données dans msg (en augmentant la valeur de len en conséquence) et send retourne -1 (send ne retourne aucune erreur du type EMSGSIZE ou ECONNECT ou autre). D'après le man de send -1 est une erreur interne et implicite de send. J'ai essayé alors deux choses : envoyer msg sans le modifier mais en diminuant len de 1 puis envoyer msg en lui ajoutant un octet et en augmentant len de 1. Même erreur -1 de send et les données ne sont pas transmises au noyau. J'ai vérifié par un affichage : len correspond au nombre d'octets de msg (et pas au nombre de bits ou de blocs de 32 ou 64 par exemple).

Quelqu'un aurait-il une idée sur la raison de cette erreur ? Y a-t-il une taille max de données pouvant être envoyées ? Mais alors pourquoi je ne parviens pas non plus à envoyer len-1 octets de msg ?

Y a-t-il un contrôle quelconque sur le message ? Un champ control à modifier ? Est-ce que send reçoit un acquittement du noyau et que c'est pour cela qu'il y a l'erreur ?

Qu'en pensez-vous ?

Merci de votre aide.

Link to comment
Share on other sites

:keskidit:

man send !

RETURN VALUE

On success, these calls return the number of characters sent. On

error, -1 is returned, and errno is set appropriately.

ERRORS

These are some standard errors generated by the socket layer. Addi-

tional errors may be generated and returned from the underlying proto-

col modules; see their respective manual pages.

EACCES (For Unix domain sockets, which are identified by pathname)

Write permission is denied on the destination socket file, or

search permission is denied for one of the directories the path

prefix. (See path_resolution(2).)

EAGAIN or EWOULDBLOCK

The socket is marked non-blocking and the requested operation

would block.

EBADF An invalid descriptor was specified.

ECONNRESET

Connection reset by peer.

(etc...)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...