2012-02-13 4 views
15

Ho una domanda molto semplice, ma non sono riuscito a trovare alcuna risposta per tutto il weekend. Sto usando la funzione sendto() e restituisce il codice di errore 14: EFAULT. Le pagine man lo descrivono come:unix socket error 14: EFAULT (indirizzo errato)

"An invalid user space address was specified for an argument." 

ero convinto che questo stava parlando l'indirizzo IP che stavo specificando, ma ora ho il sospetto che potrebbe essere la memoria indirizzo del buffer dei messaggi che si riferisce - Non riesco a trovare alcun chiarimento su questo ovunque, qualcuno può chiarire questo?

Grazie, J

+0

qualcosa all'interno dell'argomento 'const struct msghdr * message' che hai fornito a sendmsg non è valido, inserisci del codice rilevante se vuoi aiuto su più specifiche. – nos

risposta

24

EFAULT accadere se l'indirizzo di memoria di qualche argomento passato alla sendto (o più in generale a qualsiasi chiamata di sistema) non è valida. Consideralo come una sorta di SIGSEGV nel kernel land riguardante il tuo syscall. Ad esempio, se si passa un puntatore del buffer nullo o non valido (per leggere, scrivere, inviare, ricevere ...), si ottiene che

Vedere errno(3), sendto(2) ecc. Pagine man.

EFAULT non è correlato agli indirizzi IP.

+0

Aha okay grazie, controllerò il mio puntatore del buffer quando torno a casa e vedrò se è stato corretto! – aktungmak

+0

sì, l'ha fatto! Avevo alcuni dei miei suggerimenti confusi, grazie! – aktungmak