Why does recvfrom always fail and I get the error 10014 (Bad address)?
#include <winsock2.h>
#include <stdio.h>
int main() {
short port = 39890;
SOCKET sock = INVALID_SOCKET;
int err = 0;
struct sockaddr_in senderaddr, recvaddr;
int senderaddrsize;
WSADATA wsadata;
const int recvsize = 1024;
char recvbuf[recvsize];
if ( WSAStartup(MAKEWORD(2,2), &wsadata) != 0 ) {
return 1;
}
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if ( sock == INVALID_SOCKET ) {
WSACleanup();
return 1;
}
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(port);
recvaddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Sever IP: %s\n", inet_ntoa(recvaddr.sin_addr));
err = bind(sock, (struct sockaddr *) &recvaddr, sizeof(recvaddr));
if ( err != 0 ) {
printf("bind failed: %d\n", WSAGetLastError());
return 1;
}
printf("waiting for datagrams\n");
err = recvfrom(sock, recvbuf, recvsize, 0, (struct sockaddr *) &senderaddr, &senderaddrsize);
if ( err == SOCKET_ERROR ) {
printf("recvfrom error: %d\n", WSAGetLastError());
}
WSACleanup();
while ( 1 ) {
}
}