SylixOS的setsockopt中第三个参数(optname)不能或(|)
这样是不对的哦!!!
setsockopt(brdcFd, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int));
正确姿势是这样的,排好队一个一个来。。。
setsockopt(brdcFd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int));
setsockopt(brdcFd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int));
/* SylixOS广播风暴代码 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
int main(){
register ssize_t sstRecv = 0;
struct sockaddr_in sockaddrinRemote;
const char *pcSendData = "SylixOS Hello!\n";
int brdcFd;
int sendBytes;
if((brdcFd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
printf("socket fail\n");
return -1;
}
memset(&sockaddrinRemote, 0, sizeof(sockaddrinRemote));
int optval = 1; /* 一定要设置 */
setsockopt(brdcFd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int));
memset(&sockaddrinRemote, 0, sizeof(sockaddrinRemote));
if (!inet_aton("255.255.255.255", &sockaddrinRemote.sin_addr)) {
close(brdcFd); /* 关闭已经创建的 socket */
fprintf(stderr, "UDP echo client get addr error.\n");
return (-1); /* 错误返回 */
}
sockaddrinRemote.sin_family = AF_INET;
sockaddrinRemote.sin_len = sizeof(struct sockaddr_in);
sockaddrinRemote.sin_port = htons(8001);
sstRecv = strlen(pcSendData);
while(1){
if((sendBytes = sendto(brdcFd, (const void *)pcSendData, sstRecv, 0,
(const struct sockaddr *)&sockaddrinRemote, sizeof(struct sockaddr))) == -1){
printf("sendto fail, errno=%d\n", errno);
return -1;
}
// usleep(1); /* 广播的太快要加延时 */
}
close(brdcFd);
return 0;
}
var foo = 'bar';