====== Funções recv e recvfrom ====== Sintaxe: ''[[ssize_t]] recv([[tipos_dados|int]] s, [[tipos_dados|void]] * buffer, [[size_t]] len);'' ''[[ssize_t]] recvfrom([[tipos_dados|int]] s, [[tipos_dados|void]] * buffer, [[size_t len]], [[tipos_dados|int]] flags, struct [[sockaddr]] * from, [[socklen_t]] * fromlen);'' ---- A função **recv** é utilizada para receber (ler) uma mensagem de um [[socket]]. Para leitura de mensagens, também pode ser utilizada a função [[read]]. A função retorna o número de bytes lidos ou –1 se houve erro. A função **recv** é utilizada em conexões [[TCP]] (stream) ou [[orientada a conexão]]. As função **recvfrom** tem a mesma função e retorno da funções **recv**, exceto que é utilizada para comunicação [[não orientada a conexão]] ([[UDP]]). A função **recv** deve ser utilizada em conjunto com a função [[send]]. A função **recvfrom** deve ser utilizada em conjunto com a função [[send|sendto]]. Veja o exemplo: #include #include #include #include #include #include #include #include int main(void) { int iSock; int iBytes; struct sockaddr_in dest_addr; char buffer[100]; iSock = socket(AF_INET, SOCK_STREAM, 0); if( iSock == -1) { perror("socket:"); exit(1); } dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(4950); dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bzero(&(dest_addr.sin_zero), 8); if( connect(iSock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) < 0) { perror("connect:"); exit(1); } if ((iBytes=recv(iSock, buffer, 100, 0)) < 0 ) /* recebe dados do servidor */ { perror("recv"); exit(1); } buffer[iBytes] = '\0'; /* Acrescenta o \0 para garantir término nulo para a string */ printf("Recebido: %s",buffer); return 0; } --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2008/04/25 06:34//