Parenthesis problem.
if( s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP) == INVALID_SOCKET)
should be
if((s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
In your code 's' is either 0 or 1 after your line.
Domanda
I get the error "unable to bind socket" , Error : 10038, An operation was attempted on something that was not a socket. the socket gets created, but I cannot bind it.
struct sockaddr_in serverAddress ; // declared as global
struct sockaddr_in clientAddress ; // declared as global
int len=sizeof(struct sockaddr); // declared as global
SOCKET s = NULL ; // declared as global
memset (& serverAddress , 0 , sizeof ( serverAddress ));
serverAddress.sin_family = AF_UNSPEC ;
serverAddress.sin_addr.s_addr =INADDR_ANY;
serverAddress.sin_port = htons(12345);
if( s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP) == INVALID_SOCKET)
{
printf (" Unable to create a socket \n");
printf (" Failed with error : %d\n%s\n", WSAGetLastError () ,
gai_strerror ( WSAGetLastError ()));
exit (1);
}
else
{
std::cout<<"CREATED"<<std::endl;
}
if( bind(s,(struct sockaddr *)&serverAddress,sizeof(serverAddress)) < 0)
{
printf (" Unable to bind socket \n");
printf (" Failed with error : %d\n%s\n", WSAGetLastError () ,
gai_strerror ( WSAGetLastError ()));
}
else
{
printf (" Bound to socket .\n");
}
Soluzione
Parenthesis problem.
if( s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP) == INVALID_SOCKET)
should be
if((s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
In your code 's' is either 0 or 1 after your line.
Altri suggerimenti
You need to fix this line:
if( s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP) == INVALID_SOCKET)
The equality operator (==
) is getting executed first, so it creates a socket and checks if it is invalid. However, it never assigns the socket information to s
. Rather, it assigns the boolean result of the equality test, meaning s
is probably set to 0
.
You either need to put parentheses in to correct the order of execution, or simply move the assignment into a separate statement. I'd recommend the latter, for sake of readability:
s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
...
It's worth noting that your compiler is probably giving you a warning about that line. It might be saying something like "assignment within conditional expression". You generally shouldn't ignore warnings, because they can help you catch subtle mistakes like this.
this does not assigns to s , therefore I never get a socket number
if( s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP) == INVALID_SOCKET)
{
}
this is the correct way
s = socket(PF_INET,SOCK_DGRAM, IPPROTO_UDP);
if( s == INVALID_SOCKET )
{
echo "error";
}