1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
__declspec(dllexport) SISC_Init(short client_sin_family, char *adresse, int port ,int ssl_server,SISC_ConnectAtt_st *SISC_Attrib, char* errMsg)
{
int returnCode ;
struct hostent *adr ;
#ifdef WIN32
WSADATA wsa;
#endif
/*if ( (SISC_Attrib = malloc(sizeof(SISC_ConnectAtt_st))) == NULL )
{
sprintf(errMsg,"SISC_Init() Error(%d): Memory Allocation failed",MALLOC_FAILED);
return(MALLOC_FAILED);
}*/
SISC_Attrib->local_port = 2010;
#ifdef WIN32
if((returnCode=WSAStartup(MAKEWORD(2,0), &wsa)) != 0)
{
sprintf(errMsg,"SISC_Init() Error(%d) - WSAStartup: %s",returnCode,SISC_GetSocketError(SISC_Attrib));
return(returnCode);
}
#endif
SISC_Attrib->fd = socket(AF_INET,SOCK_STREAM,0);
if(SISC_Attrib->fd < 0){
sprintf(errMsg,"SISC_Init() Error(%d) - Socket: %s",SISC_Attrib->fd,SISC_GetSocketError(SISC_Attrib));
SISC_Close(SISC_Attrib);
return(SISC_Attrib->fd) ;
}
adr = gethostbyname(adresse);
if ((int)adr == -1){
sprintf(errMsg,"SISC_Init() Error(%d)- Unknown Host(%s): %s",EXIT_FAILURE,adresse,SISC_GetSocketError(SISC_Attrib));
exit(EXIT_FAILURE);
}
SISC_Attrib->server_addr.sin_family = client_sin_family;
SISC_Attrib->server_addr.sin_addr = *(struct in_addr *) adr->h_addr;
SISC_Attrib->server_addr.sin_port = htons((u_short)port);
/* Construct local address structure */
memset(&SISC_Attrib->local_address, 0, sizeof(SISC_Attrib->local_address)); /* Zero out structure */
SISC_Attrib->local_address.sin_family = AF_INET; /* Internet address family */
SISC_Attrib->local_address.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
SISC_Attrib->local_address.sin_port = htons(SISC_Attrib->local_port); /* Local port */
if ((SISC_Attrib->local_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
sprintf(errMsg,"SISC_Init() Error(%d) - Local Socket: %s",SISC_Attrib->local_socket,SISC_GetSocketError(SISC_Attrib));
return(SISC_Attrib->local_socket);
}
if(ssl_server){
// TODO::verify some arguments, else where throw a init exception
SISC_Attrib->server_ssl_state = 1;
}
else
SISC_Attrib->server_ssl_state = 0;
return(0);
} |
Partager