What is wrong with following code:
IGDDiscoverProcess::IGDDiscoverResult IGDDiscoverProcess::InitializeUDPConnection( void )
{
int error(0);
pimpl->sock = socket(
AF_INET, SOCK_DGRAM, 0
);
if( INVALID_SOCKET == pimpl->sock )
{
BHDebug(
false
, L"socket had returned a invalid socket." );
return InvalidSocket;
}
sockaddr_in addr = {0};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
u_short port = 20000;
while( true )
{
addr.sin_port = htons( port );
if(
::bind(
pimpl->sock, (sockaddr*)&addr, sizeof(addr) )
)
{
break;
}
error = WSAGetLastError();
if( WSAEADDRINUSE == error )
{
port++;
}
else if( 0 != error )
{
closesocket( pimpl->sock );
pimpl->sock = INVALID_SOCKET;
return Failed;
}
}
unsigned int ttl = 4;
unsigned long flags = 1;
error = setsockopt(
pimpl->sock
, IPPROTO_IP, IP_MULTICAST_IF
, (char*)(&ttl), sizeof(ttl)
);
BHDebug( 0 == error, L"setsockopt error." );
wchar_t local_buffer[20];
_itow_s(WSAGetLastError(),local_buffer,20,10);
BHDebug( 0 == error, local_buffer);
Network error (WSAGetLastError) is "10049" after executing this.
Error is here:
error = setsockopt(
pimpl->sock
, IPPROTO_IP, IP_MULTICAST_IF
, (char*)(&ttl), sizeof(ttl)
);
What is wrong with this function call?
UPDATE:
This is a part of code from UPnP article from www.codeproject.com .
I have not found any description for setsockopt function usage with option IPPROTO_IP.
Have you know or found any?