ho fatto una prova con questo codice che semplicemente crea un socket e lo mette in ascolto sulla porta 5002
provo a connettermi con telnet (applicativo linux) tutto procede bene...
se invece apro un prompt dei comandi da windows e digito:
C:\> telnet "hostaddr" 5002 [invio]
niente da fare.. non da segni di vita...
qualcuno mi sa dire cosa sto ignorando? Grazie mille!
Codice: Seleziona tutto
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
int main (int argc, char* const argv[]){
int socket_fd, client_socket_fd;
struct sockaddr_in sname;
struct sockaddr_in cname;
socklen_t client_name_len=0;
long flags;
char messaggio[7]={'c','i','a','o',0,10,13};
socket_fd = socket (AF_INET, SOCK_STREAM, 0);
memset(&sname,0,sizeof(struct sockaddr_in));
sname.sin_family = AF_INET;
sname.sin_port = htons(5002);
sname.sin_addr.s_addr = INADDR_ANY; //inet_addr("192.168.1.100");
if (-1 == bind (socket_fd,(struct sockaddr *) &sname, sizeof(sname))){
perror("bind");
return EXIT_FAILURE;
}
if (-1 == listen (socket_fd, 5)){
perror("listen");
return EXIT_FAILURE;
}
while(1){
client_name_len = (socklen_t) (sizeof(struct sockaddr_in));
client_socket_fd = accept (socket_fd, (struct sockaddr *) &cname, &client_name_len);
if (client_socket_fd >= 0){
flags = fcntl (client_socket_fd, F_GETFL);
if (flags >= 0 && (fcntl (client_socket_fd, F_SETFL, flags | O_NONBLOCK) == -1)){
close(client_socket_fd);
perror("accept");
}
}
printf("Ho accettato una connessione da %s\n", inet_ntoa(cname.sin_addr));
if(!fork()){
read(client_socket_fd,messaggio,7);
if(send(client_socket_fd,messaggio,7,0) == -1 ) perror("send");
close (client_socket_fd);
return EXIT_SUCCESS;
}
close (client_socket_fd);
while(waitpid(-1,NULL,WNOHANG) > 0);
}
}
