原因分析:
没有设置socket的广播SO_BROADCAST属性,或者设置失败却想当然的认为是成功。这时sendto数据返回-1,errno等于13.
1、设置SO_BROADCAST失败,windows上xp是可以成功的
bool bOptVal= 1;
int n = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&bOptVal, sizeof(bool));
2、设置SO_BROADCAST成功
int bOptVal= 1;
int n = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&bOptVal, sizeof(int));
// 附录:代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int sock = 0;
if (argc < 2) {
printf("Usage: %s local_address destination_address\n", argv[0]);