PDA

View Full Version : [c] socket non bloccante


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?

Prince_81
15-02-2009, 16:15
ho risolto aggingendo al programma il seguente codice u_long imode=1; //creo un socket non bloccante
ioctlsocket(sd,FIONBIO,&imode);