Vorrei connettermi ad'un indirizzo IP e leggere un'intero senza segno(host byte order) in una porta nota.
codice:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define DEST_IP "141.138.199.118"
#define DEST_PORT 5842
int main(void)
{
int sockfd;
struct sockaddr_in my_addr;
struct sockaddr_in dest_addr;
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = 0; // sceglie una porta a caso non in uso
my_addr.sin_addr.s_addr = INADDR_ANY; // usa il mio indirizzo IP
memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);
dest_addr.sin_family = AF_INET; // host byte order
dest_addr.sin_port = DEST_PORT; // long, network byte order
dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
connect(sockfd, (struct sockaddr *)&dest_addr, sizeof dest_addr );
unsigned int buffer[4];
recvfrom( sockfd, buffer, 4, 0,
(struct sockaddr *)&my_addr,
(int *) sizeof(struct sockaddr) ); //si ferma qua
int register i;
for(i=0 ; i<4 ; i++)
printf("%d° intero letto: %d",i , buffer[i]);
printf("\n");
return 0;
}
Il mio programma non va più avanti dopo l'invocazione di recvfrom(), ho pensato che rimane in attesa poiché la porta a cui sono connesso non invia nulla, ma di ciò non sono molto convinto. Quindi la mia domanda è, la funzione resta in attesa perché non riceve niente? Se no, perché non va avanti?