반응형
[2022/04/06] Add title image
[2022/03/58] First Edit
소나무 기운 , 전자제품 개발/생산
UDP socket , Broadcast send
UDP
serv_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCK_DGRAM, IPPROTO_UDP
Broadcast
if (setsockopt(serv_sock, SOL_SOCKET, SO_BROADCAST, (const char *)&fBroadcatOpt, sizeof(fBroadcatOpt)) < 0)
SO_BROADCAST
example
uint8_t bySendBuf[44] = {0};
int fBroadcatOpt = 1;
// fifo init
ThreadINFO_Init();
while (1)
{
LOG_DEBUG("trying: socket...\n");
serv_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (serv_sock < 0)
{
LOG_DEBUG("INFO socket() error");
error_handlingINFO("INFO socket() error");
}
LOG_DEBUG("trying: setsockopt...\n");
if (setsockopt(serv_sock, SOL_SOCKET, SO_BROADCAST, (const char *)&fBroadcatOpt, sizeof(fBroadcatOpt)) < 0)
{
LOG_DEBUG("INFO setsockopt() error");
error_handlingINFO("INFO setsockopt() error");
if (close(serv_sock) < 0)
{
LOG_DEBUG("INFO close() error");
error_handlingINFO("INFO close() error");
}
}
/* I want to get an IPv4 IP address */
ifr.ifr_addr.sa_family = AF_INET;
/* I want IP address attached to "eth0" */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ - 1);
ioctl(serv_sock, SIOCGIFADDR, &ifr);
/* display result */
printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
memset(&serv_addr, 0, sizeof(serv_addr)); // initialize the variable
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
serv_addr.sin_port = htons(g_tDevCfg.nPortINFO);
// 1초마다 한번씩 데이터 보내기
while (1)
{
sleep(0.7); // 0.7초 대기
// 데이터 만들기
ThreadINFO_MakeData(&bySendBuf[0]);
// 데이터 보내기
// printf("trying: sendto...\n");
if (sendto(serv_sock, bySendBuf, sizeof(bySendBuf), 0, (const struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in)) < 0)
{
LOG_DEBUG("INFO sendto() error");
error_handlingINFO("INFO sendto() error");
if (close(serv_sock) < 0)
{
LOG_DEBUG("INFO close() error");
error_handlingINFO("INFO close() error");
break;
}
}
}
printf("trying: close...\n");
if (close(serv_sock) < 0)
{
LOG_DEBUG("INFO losesocket() error");
error_handlingINFO("INFO losesocket() error");
}
LOG_DEBUG("END");
}
마무리
참고문헌
틀린 부분이나 질문은 댓글 달아주세요.
즐거운 하루 보내세요. 감사합니다.
반응형
'Raspberry Pi (Linux, ubuntu)' 카테고리의 다른 글
sleep() usleep() for linux, Sleep() for windows (0) | 2022.03.12 |
---|---|
How to Install x11vnc server on Ubuntu 20.04 (0) | 2022.03.08 |
linux, ubuntu shutdown command (0) | 2022.03.08 |
How to use a non-blocking TCP socket. (0) | 2022.03.08 |
How to Auto Start a Program on Raspberry Pi? (0) | 2022.03.07 |
댓글