Kaydet (Commit) 00e029ee authored tarafından Damjan Jovanovic's avatar Damjan Jovanovic

#i125003# migrate main/sal/qa/osl/socket from cppunit to Google Test,

get tests to compile and not to SIGSEGV or die from EPIPE,
and get as many tests to pass as possible.
üst 36e4deae
...@@ -32,180 +32,174 @@ ENABLE_EXCEPTIONS=TRUE ...@@ -32,180 +32,174 @@ ENABLE_EXCEPTIONS=TRUE
.INCLUDE : settings.mk .INCLUDE : settings.mk
.IF "$(ENABLE_UNIT_TESTS)" != "YES"
all:
@echo unit tests are disabled. Nothing to do.
.ELSE
CFLAGS+= $(LFS_CFLAGS) CFLAGS+= $(LFS_CFLAGS)
CXXFLAGS+= $(LFS_CFLAGS) CXXFLAGS+= $(LFS_CFLAGS)
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL1OBJS= \ APP1OBJS= \
$(SLO)$/osl_Socket.obj $(SLO)$/osl_Socket.obj
SHL1TARGET=osl_SocketOld APP1TARGET=osl_SocketOld
SHL1STDLIBS= $(SALLIB) $CPPUNITLIB) $(TESTSHL2LIB) APP1STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL1STDLIBS+= $(WS2_32LIB) APP1STDLIBS+= $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF ""$(OS)"=="SOLARIS"
SHL1STDLIBS+= -ldl -lnsl APP1STDLIBS+= -ldl -lnsl
.ENDIF .ENDIF
SHL1IMPLIB= i$(SHL1TARGET) APP1RPATH = NONE
# SHL1DEF= $(MISC)$/$(SHL1TARGET).def APP1TEST = enabled
DEF1NAME=$(SHL1TARGET)
# DEF1EXPORTFILE= export.exp
SHL1VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# --- BEGIN -------------------------------------------------------- # --- BEGIN --------------------------------------------------------
SHL2OBJS= \ APP2OBJS= \
$(SLO)$/osl_Socket_tests.obj $(SLO)$/osl_Socket_tests.obj
SHL2TARGET= osl_Socket_tests APP2TARGET= osl_Socket_tests
SHL2STDLIBS= $(SALLIB) $CPPUNITLIB) $(TESTSHL2LIB) APP2STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
APP2RPATH = NONE
SHL2IMPLIB= i$(SHL2TARGET) APP2TEST = enabled
DEF2NAME= $(SHL2TARGET)
SHL2VERSIONMAP = $(PRJ)$/qa$/export.map
# END -------------------------------------------------------------- # END --------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL3OBJS= \ APP3OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_StreamSocket.obj $(SLO)$/osl_StreamSocket.obj
SHL3TARGET= osl_StreamSocket APP3TARGET= osl_StreamSocket
SHL3STDLIBS= $(SALLIB) $CPPUNITLIB) $(TESTSHL2LIB) APP3STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL3STDLIBS += $(WS2_32LIB) APP3STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL3STDLIBS += -ldl -lnsl APP3STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL3IMPLIB= i$(SHL3TARGET) APP3RPATH = NONE
DEF3NAME= $(SHL3TARGET) APP3TEST = enabled
SHL3VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL4OBJS= \ APP4OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_DatagramSocket.obj $(SLO)$/osl_DatagramSocket.obj
SHL4TARGET= osl_DatagramSocket APP4TARGET= osl_DatagramSocket
SHL4STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) APP4STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL4STDLIBS += $(WS2_32LIB) APP4STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL4STDLIBS += -ldl -lnsl APP4STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL4IMPLIB= i$(SHL4TARGET) APP4RPATH = NONE
DEF4NAME= $(SHL4TARGET) APP4TEST = enabled
SHL4VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL5OBJS= \ APP5OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_SocketAddr.obj $(SLO)$/osl_SocketAddr.obj
SHL5TARGET= osl_SocketAddr APP5TARGET= osl_SocketAddr
SHL5STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) APP5STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL5STDLIBS += $(WS2_32LIB) APP5STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL5STDLIBS += -ldl -lnsl APP5STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL5IMPLIB= i$(SHL5TARGET) APP5RPATH = NONE
DEF5NAME= $(SHL5TARGET) APP5TEST = enabled
SHL5VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL6OBJS= \ APP6OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_Socket2.obj $(SLO)$/osl_Socket2.obj
SHL6TARGET= osl_Socket2 APP6TARGET= osl_Socket2
SHL6STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) APP6STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL6STDLIBS += $(WS2_32LIB) APP6STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL6STDLIBS += -ldl -lnsl APP6STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL6IMPLIB= i$(SHL6TARGET) APP6RPATH = NONE
DEF6NAME= $(SHL6TARGET) APP6TEST = enabled
SHL6VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL7OBJS= \ APP7OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_ConnectorSocket.obj $(SLO)$/osl_ConnectorSocket.obj
SHL7TARGET= osl_ConnectorSocket APP7TARGET= osl_ConnectorSocket
SHL7STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) APP7STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL7STDLIBS += $(WS2_32LIB) APP7STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL7STDLIBS += -ldl -lnsl APP7STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL7IMPLIB= i$(SHL7TARGET) APP7RPATH = NONE
DEF7NAME= $(SHL7TARGET) APP7TEST = enabled
SHL7VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
# BEGIN ---------------------------------------------------------------- # BEGIN ----------------------------------------------------------------
# auto generated Target:Socket by codegen.pl # auto generated Target:Socket by codegen.pl
SHL8OBJS= \ APP8OBJS= \
$(SLO)$/sockethelper.obj \ $(SLO)$/sockethelper.obj \
$(SLO)$/osl_AcceptorSocket.obj $(SLO)$/osl_AcceptorSocket.obj
SHL8TARGET= osl_AcceptorSocket APP8TARGET= osl_AcceptorSocket
SHL8STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) APP8STDLIBS= $(SALLIB) $(GTESTLIB) $(TESTSHL2LIB)
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
SHL8STDLIBS += $(WS2_32LIB) APP8STDLIBS += $(WS2_32LIB)
.ENDIF .ENDIF
.IF "$(GUI)" == "UNX" .IF "$(OS)"=="SOLARIS"
SHL8STDLIBS += -ldl -lnsl APP8STDLIBS += -ldl -lnsl
.ENDIF .ENDIF
SHL8IMPLIB= i$(SHL8TARGET) APP8PATH = NONE
DEF8NAME= $(SHL8TARGET) APP8TEST = enabled
SHL8VERSIONMAP = $(PRJ)$/qa$/export.map
# auto generated Target:Socket # auto generated Target:Socket
# END ------------------------------------------------------------------ # END ------------------------------------------------------------------
...@@ -216,4 +210,5 @@ SHL8VERSIONMAP = $(PRJ)$/qa$/export.map ...@@ -216,4 +210,5 @@ SHL8VERSIONMAP = $(PRJ)$/qa$/export.map
# --- Targets ------------------------------------------------------ # --- Targets ------------------------------------------------------
.INCLUDE : target.mk .INCLUDE : target.mk
.INCLUDE : _cppunit.mk
.ENDIF # "$(ENABLE_UNIT_TESTS)" != "YES"
\ No newline at end of file
...@@ -75,7 +75,9 @@ extern "C" ...@@ -75,7 +75,9 @@ extern "C"
# include <errno.h> # include <errno.h>
# include <fcntl.h> # include <fcntl.h>
# include <sys/stat.h> # include <sys/stat.h>
# include <sys/statfs.h> # ifndef __FreeBSD__
# include <sys/statfs.h>
# endif
# include <sys/statvfs.h> # include <sys/statvfs.h>
# include <sys/types.h> # include <sys/types.h>
# include <sys/socket.h> # include <sys/socket.h>
......
...@@ -75,7 +75,9 @@ extern "C" ...@@ -75,7 +75,9 @@ extern "C"
# include <errno.h> # include <errno.h>
# include <fcntl.h> # include <fcntl.h>
# include <sys/stat.h> # include <sys/stat.h>
# include <sys/statfs.h> # ifndef __FreeBSD__
# include <sys/statfs.h>
# endif
# include <sys/statvfs.h> # include <sys/statvfs.h>
# include <sys/types.h> # include <sys/types.h>
# include <sys/socket.h> # include <sys/socket.h>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
//------------------------------------------------------------------------ //------------------------------------------------------------------------
#include <osl_Socket_Const.h> #include <osl_Socket_Const.h>
#include <testshl/simpleheader.hxx> #include "gtest/gtest.h"
#include <osl/socket.hxx> #include <osl/socket.hxx>
//------------------------------------------------------------------------ //------------------------------------------------------------------------
// helper functions // helper functions
...@@ -42,24 +42,18 @@ ...@@ -42,24 +42,18 @@
namespace osl_Socket namespace osl_Socket
{ {
class tests : public CppUnit::TestFixture class tests : public ::testing::Test
{ {
public: public:
void test_001()
{
// _osl_getFullQualifiedDomainName( );
oslSocketResult aResult;
rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult);
CPPUNIT_ASSERT_MESSAGE("getLocalHostname failed", aResult == osl_Socket_Ok);
}
CPPUNIT_TEST_SUITE( tests );
CPPUNIT_TEST( test_001 );
CPPUNIT_TEST_SUITE_END();
}; };
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::tests, "osl_SocketTest"); TEST_F(tests, test_001)
{
// _osl_getFullQualifiedDomainName( );
oslSocketResult aResult;
rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult);
ASSERT_TRUE(aResult == osl_Socket_Ok) << "getLocalHostname failed";
}
} }
...@@ -79,6 +73,10 @@ void RegisterAdditionalFunctions( FktRegFuncPtr _pFunc ) ...@@ -79,6 +73,10 @@ void RegisterAdditionalFunctions( FktRegFuncPtr _pFunc )
#else*/ #else*/
NOADDITIONAL; int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
//#endif //#endif
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
// MARKER(update_precomp.py): autogen include statement, do not remove // MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sal.hxx" #include "precompiled_sal.hxx"
#include "sockethelper.hxx" #include "sockethelper.hxx"
#include <testshl/simpleheader.hxx>
//------------------------------------------------------------------------ //------------------------------------------------------------------------
// Ip version definition // Ip version definition
...@@ -66,7 +65,7 @@ sal_Bool compareSocketAddr( const ::osl::SocketAddr & addr1 , const ::osl::Socke ...@@ -66,7 +65,7 @@ sal_Bool compareSocketAddr( const ::osl::SocketAddr & addr1 , const ::osl::Socke
{ {
rtl::OString aString; rtl::OString aString;
aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
t_print("oustring2char %s\n", aString.getStr( ) ); printf("oustring2char %s\n", aString.getStr( ) );
sal_Char * sStr = aString.getStr( ); sal_Char * sStr = aString.getStr( );
return (char *)sStr; return (char *)sStr;
}*/ }*/
...@@ -75,11 +74,11 @@ sal_Bool compareSocketAddr( const ::osl::SocketAddr & addr1 , const ::osl::Socke ...@@ -75,11 +74,11 @@ sal_Bool compareSocketAddr( const ::osl::SocketAddr & addr1 , const ::osl::Socke
*/ */
void printUString( const ::rtl::OUString & str, const char* msg) void printUString( const ::rtl::OUString & str, const char* msg)
{ {
t_print("#%s #printUString_u# ", msg ); printf("#%s #printUString_u# ", msg );
rtl::OString aString; rtl::OString aString;
aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
//char * sStr = aString.getStr( ); //char * sStr = aString.getStr( );
t_print("%s\n", aString.getStr( ) ); printf("%s\n", aString.getStr( ) );
} }
/** get the local host name. /** get the local host name.
...@@ -122,7 +121,7 @@ void printUString( const ::rtl::OUString & str, const char* msg) ...@@ -122,7 +121,7 @@ void printUString( const ::rtl::OUString & str, const char* msg)
strcpy( hostname, hptr->h_name ); strcpy( hostname, hptr->h_name );
} }
t_print("hostname is %s \n", hostname ); printf("hostname is %s \n", hostname );
rtl::OString sHostname( hostname ); rtl::OString sHostname( hostname );
aUString = ::rtl::OStringToOUString( sHostname, RTL_TEXTENCODING_ASCII_US ); aUString = ::rtl::OStringToOUString( sHostname, RTL_TEXTENCODING_ASCII_US );
aUString.getLength(); aUString.getLength();
...@@ -145,7 +144,7 @@ void printUString( const ::rtl::OUString & str, const char* msg) ...@@ -145,7 +144,7 @@ void printUString( const ::rtl::OUString & str, const char* msg)
//if there are more than one IPs on the same machine, we select one //if there are more than one IPs on the same machine, we select one
for (; *addrptr; addrptr++) for (; *addrptr; addrptr++)
{ {
t_print("#Local IP Address: %s\n", inet_ntoa(**addrptr)); printf("#Local IP Address: %s\n", inet_ntoa(**addrptr));
aUString = ::rtl::OUString::createFromAscii( (sal_Char *) (inet_ntoa(**addrptr)) ); aUString = ::rtl::OUString::createFromAscii( (sal_Char *) (inet_ntoa(**addrptr)) );
} }
} }
...@@ -192,30 +191,30 @@ void thread_sleep( sal_Int32 _nSec ) ...@@ -192,30 +191,30 @@ void thread_sleep( sal_Int32 _nSec )
#if ( defined UNX ) || ( defined OS2 ) //Unix #if ( defined UNX ) || ( defined OS2 ) //Unix
usleep(_nSec * 100000); usleep(_nSec * 100000);
#endif #endif
// t_print("# done\n" ); // printf("# done\n" );
} }
/** print Boolean value. /** print Boolean value.
*/ */
void printBool( sal_Bool bOk ) void printBool( sal_Bool bOk )
{ {
t_print("printBool " ); printf("printBool " );
( sal_True == bOk ) ? t_print("YES!" ): t_print("NO!"); ( sal_True == bOk ) ? printf("YES!" ): printf("NO!");
t_print("\n"); printf("\n");
} }
/** print content of a ByteSequence. /** print content of a ByteSequence.
*/ */
void printByteSequence_IP( const ::rtl::ByteSequence & bsByteSeq, sal_Int32 nLen ) void printByteSequence_IP( const ::rtl::ByteSequence & bsByteSeq, sal_Int32 nLen )
{ {
t_print("ByteSequence is: " ); printf("ByteSequence is: " );
for ( int i = 0; i < nLen; i++ ){ for ( int i = 0; i < nLen; i++ ){
if ( bsByteSeq[i] < 0 ) if ( bsByteSeq[i] < 0 )
t_print("%d ", 256 + bsByteSeq[i] ); printf("%d ", 256 + bsByteSeq[i] );
else else
t_print("%d ", bsByteSeq[i] ); printf("%d ", bsByteSeq[i] );
} }
t_print(" .\n" ); printf(" .\n" );
} }
/** convert an IP which is stored as a UString format to a ByteSequence array for later use. /** convert an IP which is stored as a UString format to a ByteSequence array for later use.
...@@ -249,27 +248,27 @@ void printByteSequence_IP( const ::rtl::ByteSequence & bsByteSeq, sal_Int32 nLen ...@@ -249,27 +248,27 @@ void printByteSequence_IP( const ::rtl::ByteSequence & bsByteSeq, sal_Int32 nLen
*/ */
void printSocketResult( oslSocketResult eResult ) void printSocketResult( oslSocketResult eResult )
{ {
t_print("printSocketResult: " ); printf("printSocketResult: " );
if (!eResult) if (!eResult)
switch (eResult) switch (eResult)
{ {
case osl_Socket_Ok: case osl_Socket_Ok:
t_print("client connected\n"); printf("client connected\n");
break; break;
case osl_Socket_Error: case osl_Socket_Error:
t_print("got an error ... exiting\r\n\r\n" ); printf("got an error ... exiting\r\n\r\n" );
break; break;
case osl_Socket_TimedOut: case osl_Socket_TimedOut:
t_print("timeout\n"); printf("timeout\n");
break; break;
case osl_Socket_Interrupted: case osl_Socket_Interrupted:
t_print("interrupted\n"); printf("interrupted\n");
break; break;
case osl_Socket_InProgress: case osl_Socket_InProgress:
t_print("in progress\n"); printf("in progress\n");
break; break;
default: default:
t_print("unknown result\n"); printf("unknown result\n");
break; break;
} }
} }
...@@ -349,7 +348,7 @@ sal_Bool ifIpv4is( const ::rtl::ByteSequence Ipaddr, sal_Int8 seq1, sal_Int8 seq ...@@ -349,7 +348,7 @@ sal_Bool ifIpv4is( const ::rtl::ByteSequence Ipaddr, sal_Int8 seq1, sal_Int8 seq
#endif #endif
if (strstr( buffer, strOK ) != NULL ) if (strstr( buffer, strOK ) != NULL )
result = sal_True; result = sal_True;
t_print("buffer is %s\n", buffer ); printf("buffer is %s\n", buffer );
} }
close (p[0]); close (p[0]);
waitpid (pid, &nStatus, 0); waitpid (pid, &nStatus, 0);
...@@ -387,9 +386,9 @@ sal_Bool ifAvailable( rtl::OUString const& strAddrOrHostName ) ...@@ -387,9 +386,9 @@ sal_Bool ifAvailable( rtl::OUString const& strAddrOrHostName )
aSocket.close(); aSocket.close();
if ( aResult != osl_Socket_Ok ) if ( aResult != osl_Socket_Ok )
{ {
t_print("Error: "); printf("Error: ");
printSocketResult(aResult); printSocketResult(aResult);
t_print("\n"); printf("\n");
return sal_False; return sal_False;
} }
......
...@@ -68,7 +68,9 @@ extern "C" ...@@ -68,7 +68,9 @@ extern "C"
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/statfs.h> #ifndef __FreeBSD__
# include <sys/statfs.h>
#endif
#include <sys/statvfs.h> #include <sys/statvfs.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment