[問題] 為何無法在windows底下加入指定的group
小弟寫了一個client的程式如下
#pragma comment (lib,"ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#define SERV_PORT 1800
#define CLI_PORT 1801
#define MAXDATA 1024
int size;
int Start_Winsock()
{
WSAData m_wsaData;
if(WSAStartup(0x0101, (LPWSADATA)&m_wsaData))
{
printf("Error: Can't open winsock\n");
return -1;
}
return 0;
}
void main(void)
{
int recv_sock;
int reuse = 1;
char recv[MAXDATA];
struct sockaddr_in recv_addr;
struct ip_mreq group;
Start_Winsock();
recv_sock = socket(AF_INET, SOCK_DGRAM, 0);
if (recv_sock == -1)
{
return -1;
}
if (setsockopt(recv_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse,
sizeof(reuse)) < 0)
{
printf("setting SO_REUSEADDR");
closesocket(recv_sock);
return -1;
}
memset(&recv_addr, 0, sizeof(recv_addr));
recv_addr.sin_family = AF_INET;
recv_addr.sin_addr.s_addr = INADDR_ANY;
recv_addr.sin_port = htons(CLI_PORT);
if(bind(recv_sock, (struct sockaddr *)&recv_addr, sizeof(recv_addr)) < 0)
{
perror("Binding datagram socket error ");
system("pause");
exit (1);
}
group.imr_multiaddr.s_addr = inet_addr("239.255.255.250");
group.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(recv_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group,
sizeof(group)) < 0 )
{
perror("adding multicast group\n");
system("pause");
closesocket(recv_sock);
return -1;
}
但我的程式執行到上面的步驟
無法加入我所指定的group
setsockopt的回傳直是-1
印出的訊息如下
adding multicast group : No error
麻煩高手幫忙看看
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.203.50
→
04/29 17:22, , 1F
04/29 17:22, 1F
※ 編輯: braynwu 來自: 210.243.128.59 (04/29 17:36)
※ 編輯: braynwu 來自: 210.243.128.59 (04/29 17:41)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章