Erreur WriteFile incohérente
Bonjour à tous,
J'utilise la fonction Windows WriteFile qui permet d'écrire dans une named pipe des données.
La création de la named pipe ne pose pas de problèmes, et la lecture de la named pipe reçoit 100% des données envoyées...
Mais la fonction WriteFile me retourne quand même une erreur (retourne FALSE).
Le GetLastError me donne 109 : ERROR_BROKEN_PIPE et la variable sensé contenir le total des données envoyées est à 0, alors que tout a bien été reçu de l'autre côté de la pipe.
Voici un bout de code où j'appelle la fonction (et la création de ma named pipe) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| // Named Pipe creation
pipe = CreateNamedPipe(
pipe_name, // name of the pipe
PIPE_ACCESS_DUPLEX, // Read/Write
PIPE_TYPE_BYTE, // send data as a byte stream
1, // only allow 1 instance of this pipe
0, // no outbound buffer
0, // no inbound buffer
0, // use default wait time
NULL // use default security attributes
);
if(pipe == NULL || pipe == INVALID_HANDLE_VALUE)
{
printf("Failed to create the named pipe '%s'!\n", pipe_name);
CloseHandle(pipe);
return 6;
}
// Write the restore_data on the named pipe
result = WriteFile(
pipe, // handle to our generic write pipe
restore_data, // data to send
sizeof_data, // length of data to send (bytes)
&numBytesWritten, // will store actual amount of data sent
NULL // not using overlapped IO
);
if(!result)
{
printf("Error while sending data to the named pipe: %d\n", GetLastError()); // Affiche : 109
printf("SizeOfData: %d\tNumBytesWritten: %d\n", sizeof_data, numBytesWritten); // Affiche : Le réel montant et 0.
CloseHandle(pipe);
return 2;
} |
Je sais juste que dans certains cas (named pipe asynchronous), le retour de WriteFile peut être false, mais ce n'est pas le cas ici, et en plus le retour d'erreur est sensé être ERROR_IO_PENDING, et non ERROR_BROKEN_PIPE.