@@ -252,6 +252,8 @@ DLLEXPORT int socketOpen(WolframLibraryData libData, mint Argc, MArgument *Args,
252252 }
253253
254254 freeaddrinfo (address );
255+ libData -> UTF8String_disown (host );
256+ libData -> UTF8String_disown (port );
255257
256258 MArgument_setInteger (Res , listenSocket );
257259 return LIBRARY_NO_ERROR ;
@@ -325,6 +327,8 @@ static void socketListenerTask(mint taskId, void* vtarg)
325327 libData -> ioLibraryFunctions -> DataStore_addInteger (ds , server -> clients [i ]);
326328 libData -> ioLibraryFunctions -> DataStore_addMNumericArray (ds , data );
327329 libData -> ioLibraryFunctions -> raiseAsyncEvent (taskId , "Received" , ds );
330+ libData -> numericarrayLibraryFunctions -> MNumericArray_disown (data );
331+ libData -> ioLibraryFunctions -> deleteDataStore (ds );
328332 } else if (iResult == 0 ) {
329333 server -> clients [i ] = INVALID_SOCKET ;
330334 }
@@ -435,6 +439,8 @@ DLLEXPORT int socketConnect(WolframLibraryData libData, mint Argc, MArgument *Ar
435439 #endif
436440
437441 MArgument_setInteger (Res , connectSocket );
442+ libData -> UTF8String_disown (host );
443+ libData -> UTF8String_disown (port );
438444 return LIBRARY_NO_ERROR ;
439445}
440446
@@ -520,6 +526,7 @@ DLLEXPORT int socketBinaryWrite(WolframLibraryData libData, mint Argc, MArgument
520526 }
521527
522528 MArgument_setInteger (Res , clientId );
529+ libData -> numericarrayLibraryFunctions -> MNumericArray_disown (mArr );
523530 return LIBRARY_NO_ERROR ;
524531}
525532
@@ -538,6 +545,7 @@ DLLEXPORT int socketWriteString(WolframLibraryData libData, mint Argc, MArgument
538545 }
539546
540547 MArgument_setInteger (Res , socketId );
548+ libData -> UTF8String_disown (data );
541549 return LIBRARY_NO_ERROR ;
542550}
543551
@@ -581,6 +589,10 @@ DLLEXPORT int socketReadMessage(WolframLibraryData libData, mint Argc, MArgument
581589 return LIBRARY_FUNCTION_ERROR ;
582590 }
583591
592+ #ifdef _DEBUG
593+ printf ("[socketReadMessage]\n\tsocket id = %d received = %d bytes\n\n" , socketId , iResult );
594+ #endif
595+
584596 return LIBRARY_NO_ERROR ;
585597}
586598
@@ -597,6 +609,10 @@ DLLEXPORT int socketPort(WolframLibraryData libData, mint Argc, MArgument *Args,
597609 getsockname (socketId , (struct sockaddr * )& sin , & addrlen );
598610 port = ntohs (sin .sin_port );
599611
612+ #ifdef _DEBUG
613+ printf ("[socketHostname]\n\tsocket id = %d hostname = %d\n\n" , socketId , port );
614+ #endif
615+
600616 MArgument_setInteger (Res , port );
601617 return LIBRARY_NO_ERROR ;
602618}
@@ -607,14 +623,20 @@ DLLEXPORT int socketPort(WolframLibraryData libData, mint Argc, MArgument *Args,
607623
608624DLLEXPORT int socketHostname (WolframLibraryData libData , mint Argc , MArgument * Args , MArgument Res ) {
609625 SOCKET socketId = MArgument_getInteger (Args [0 ]);
610- struct sockaddr_in sin ;
611- char str [INET_ADDRSTRLEN ];
626+ struct sockaddr_in sin ;
627+ //char str[INET_ADDRSTRLEN];
628+ char * str ;
629+ str = (void * )malloc (INET_ADDRSTRLEN * sizeof (char ));
612630 int addrlen = sizeof (sin );
613631
614632 getsockname (socketId , (struct sockaddr * )& sin , & addrlen );
615633 struct in_addr ip = sin .sin_addr ;
616634 inet_ntop (AF_INET , & ip , str , INET_ADDRSTRLEN );
617635
636+ #ifdef _DEBUG
637+ printf ("[socketHostname]\n\tsocket id = %d hostname = %s\n\n" , socketId , str );
638+ #endif
639+
618640 MArgument_setUTF8String (Res , str );
619641 return LIBRARY_NO_ERROR ;
620642}
@@ -639,9 +661,14 @@ DLLEXPORT int socketClients(WolframLibraryData libData, mint Argc, MArgument *Ar
639661 libData -> MTensor_new (MType_Integer , rank , dims , & data );
640662 mint * out ;
641663 out = libData -> MTensor_getIntegerData (data );
642- for (int i = 0 ; i < 1 ; i ++ ){
664+ for (int i = 0 ; i < servers [ serverId ] -> clientsLength ; i ++ ){
643665 out [i ] = servers [serverId ]-> clients [i ];
644666 }
667+
668+ #ifdef _DEBUG
669+ printf ("[socketHostname]\n\tsocket id = %d number of connected clients = %d\n\n" , socketId , servers [serverId ]-> clientsLength );
670+ #endif
671+
645672 MArgument_setMTensor (Res , data );
646673 return LIBRARY_NO_ERROR ;
647674}
0 commit comments