recvfrom()/ sendto()

Funcțile sunt folosite pentru a primi/trimite o datagrama peste un socket. Mai multe detalii găsiți aici.

#include <sys/types.h> #include <sys/socket.h> struct sockaddr to; // Filling server information memset(&to, 0, sizeof(servaddr)); to.sin_family = AF_INET; to.sin_port = htons(8888); int rc = inet_aton("127.0.0.1", &to.sin_addr); int byteswrite = sendto(int sockfd, char *buff, int nbytes, int flags, struct sockaddr *to, int addrlen); if (byteswrite == -1) { /* trateaza eroare */ } /* from va fi populata de apelul recvfrom si va contine informatii despre cine a trimis datagrama catre noi */ struct sockaddr from; int bytesread = recvfrom(int sockfd, char *buff, int nbytes, int flags, struct sockaddr *from, int *addrlen); if (bytesread == -1) { /* trateaza eroare */ }

Explicatii:

  • sockfd - Descriptorul de fisier returnat de socket()
  • buff - Bufferul unde se găsesc datele ce urmează a fi trimise/bufferul unde se vor recepționa datele;
  • flags - Precizează condiții de efectuare a transmisiei;
  • to/from - Structura ce indica adresa unde se trimite/de unde se primesc date. In cazul lui recvfrom() se populeaza de către funcție.
  • addrlen - Lungimea structurii to/from în octeți. În cazul recvfrom(), este un pointer care trebuie să indice, la început, către o valoare egală cu dimensiunea zonei de memorie alocate pentru structura de tip adresă și este completă (restrânsă) - dacă este necesar - de către funcție.