Funzione per l'invio di un messaggio UDP con notifica a una stazione precedentemente specificata.
Il messaggio prevede obbligatoriamente la risposta, che deve essere letta tramite la funzione udp_recv_notify(). La funzione può essere usata solo per comunicazioni da parte del client.
|
i32 udp_send_notify (i32 idx, buff, i32 buffLen)
|
|
Numero dell'handler della comunicazione UDP.
|
|
Buffer generico contenente il pacchetto dati da trasmettere. Può essere una variabile string, una struct_p (struttura packed) oppure un array di struct_p. Nel caso di struct_p, la variabile deve essere dichiarata globale.
Nella struttura, il primo membro deve essere dichiarato di tipo u32 e rappresenta l'identificatore del messaggio msgId; il valore viene attribuito dalla funzione udp_send_notify(). msgId deve essere utilizzato lato server nel messaggio di risposta e serve per garantire l'instradamento al client corretto. Tutti gli altri dati sono ad uso utente.
La dimensione massima di questa struttura è: MAX_UDP_DATA=508 byte.
|
|
Numero di byte totali da trasmettere (compreso msgId).
|
|
Rende:
|
|
>= 0
|
Operazione eseguita con successo. Viene reso il numero di caratteri inviati.
|
-1
|
idx illegale.
|
-2
|
Socket non aperto.
|
-3
|
Socket aperto come server e non come client.
|
-4
|
buffLen maggiore del massimo consentito.
|
-5
|
Una udp_send_notify() già in corso per l'idx specificato.
|
-1000 -:- -2000
|
Codice di errore della funzione di S.O. sendto(), con offset 1000.
|
Per vedere più nello specifico alcuni errori resi, vedi Tabella errori resi.
|
|
Rule, Task.
|
|
Una sola funzione udp_send_notify() può essere attiva contemporaneamente verso ciascun server (cioè per ciascun idx aperto).
|
Per un esempio concreto vedi in ambiente RDE: Workspace -> Speciali -> Libreria degli esempi.
|
|
-1009
|
[EBADF] Id non valido.
|
-1011
|
[EAGAIN o EWOULDBLOCK] Ritentare. Il socket era di tipo non-blocking e la ricezione avrebbe bloccato l'esecuzione, oppure un timeout sulla ricezione è stato impostato e tale timeout è scaduto prima che alcun dato sia stato ricevuto.
|
-1013
|
[EACCES] L'opzione SO_BROADCAST non è stata impostata sul socket e un indirizzo impostato è di tipo broadcast.
|
-1014
|
[EFAULT] Il puntatore buffer punta a un'area di memoria fuori dallo spazio di processo.
|
-1022
|
[EINVAL] La lunghezza totale degli I/O è maggiore del massimo rappresentabile dal tipo restituito.
|
-1032
|
[EPIPE] Il socket ha perso la connessione.
|
-1088
|
[ENOTSOCK] Id non valido, non si riferisce ad un socket.
|
-1089
|
[EDESTADDRREQ] In un socket non connesso l'indirizzo non è stato specificato.
|
-1097
|
[EAFNOSUPPORT] L'indirizzo specificato nella famiglia di indirizzi non può essere usato da questo socket.
|
-1105
|
[ENOBUFS] Il messaggio non è stato inviato perchè avrebbe superato la dimensione massima del buffer.
|
-1106
|
[EISCONN] Un indirizzo di destinazione è stato specificato e il socket è già connesso.
|
-1112
|
[EHOSTDOWN] La destinazione è un host sulla sottorete locale e non risponde al protocollo ARP.
|
-1113
|
[EHOSTUNREACH] Destinazione non raggiungibile.
|
-1122
|
[EMSGSIZE] Messaggio troppo lungo.
|
NOTA: Per la tabella completa dei codici errore vedi Codici di errore funzioni tenendo conto dell'offset.
|