PDA

Visualizza la versione completa : SOCKET C - problemi con la accept


lio.b
15-10-2009, 14:46
Come scritto nel titolo del post, non riesco a far funzionare la accept. Alla fine ho fatto un'esempio elementare per capire il mio errore ma sono alle solite. Il piccolissimo codice il seguente:


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(){
int ds_sock, ds_sock_acc;
struct sockaddr_in my_addr;
struct sockaddr addr;
int addrlen;
ds_sock = socket(AF_INET,SOCK_STREAM,0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = 1999;
my_addr.sin_addr.s_addr = INADDR_ANY;
bind(ds_sock,&my_addr,sizeof(my_addr));
ds_sock_acc = accept(ds_sock,&addr,&addrlen);
if(ds_sock_acc == -1)
perror("errore: ");
close(ds_sock);
close(ds_sock_acc);

}

La perror dopo la accept mi stampa "invalid argument" ma a me sembrano corretti.

lio.b
15-10-2009, 16:02
Ho rivisitato il codice dell'accept,senza successo, come segue:


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>

int main(){
int ds_sock, ds_sock_acc;
struct sockaddr_in my_addr;//informazioni sul mio
struct sockaddr_in addr;//informazioni su chi si connette
//socklen_t addrlen = sizeof addr;
ds_sock = socket(AF_INET,SOCK_STREAM,0);

my_addr.sin_family = AF_INET;
my_addr.sin_port = 1999;
my_addr.sin_addr.s_addr = INADDR_ANY;
int a = sizeof(my_addr);
bind(ds_sock,(struct sockaddr *)&my_addr,sizeof my_addr);
ds_sock_acc = accept(ds_sock,(struct sockaddr*)&addr,&a);
if(ds_sock_acc == -1)
perror("errore: ");
close(ds_sock);
close(ds_sock_acc);

}

C' qualcuno che gentilmente potrebbe fare un copia ed incolla per provarlo sulla sua distribuzione linux per vedere se da il mio stesso errore? Non capisco proprio cosa ci sia di sbagliato

Loading