Prince_81
15-02-2009, 15:21
ho trovato su un sito un codice che permette di inizializzare un socket
#if defined(WIN32)
#include <winsock.h>
#define close closesocket /* per utilizzare close al posto di closesocket */
int init_winsock(void){ /* Inizializzazione winsock */
WSADATA wsadata;
int err;
err = WSAStartup(MAKEWORD(2,2),&wsadata);
if(err != 0){
return 0;
}
else return 1;
}
int sd, port;
char ip[17], buffer[256],port_str[4];
struct sockaddr_in saddr;
#elif defined(unix)
#include <arpa/inet.h>
#include <sys/socket.h>
#define init_winsock() 1 /* su unix questa condizione sarà sempre vera */
#define closesocket close /* se nel codice si trova closesocket si chiamerà close */
#define WSACleanup() ; /* su Unix WSACleanup = istruzione vuota */
#endif
con questo codice però si crea un socket bloccante cioè recv e send attendono che arrivi un messaggio.
è possibile modificare il codice affinche le due funzioni diventino non bloccanti oppure è possibile far diventare non bloccante una funzione recv o send all'interno senza modificare il codice che ho postato?
#if defined(WIN32)
#include <winsock.h>
#define close closesocket /* per utilizzare close al posto di closesocket */
int init_winsock(void){ /* Inizializzazione winsock */
WSADATA wsadata;
int err;
err = WSAStartup(MAKEWORD(2,2),&wsadata);
if(err != 0){
return 0;
}
else return 1;
}
int sd, port;
char ip[17], buffer[256],port_str[4];
struct sockaddr_in saddr;
#elif defined(unix)
#include <arpa/inet.h>
#include <sys/socket.h>
#define init_winsock() 1 /* su unix questa condizione sarà sempre vera */
#define closesocket close /* se nel codice si trova closesocket si chiamerà close */
#define WSACleanup() ; /* su Unix WSACleanup = istruzione vuota */
#endif
con questo codice però si crea un socket bloccante cioè recv e send attendono che arrivi un messaggio.
è possibile modificare il codice affinche le due funzioni diventino non bloccanti oppure è possibile far diventare non bloccante una funzione recv o send all'interno senza modificare il codice che ho postato?