На пример работающего забинденного сокета. Где ошибка у тебя - не разбирался. Если что где недовырезал или перевырезал просьба не пинать а стучаться в мыло.
WSADATA wsaData;
struct sockaddr_in local, to, from;
int fromlen, i, _i;
SOCKET S;
time_t T;
byte buf[64000];
signed long Ready, Ready2;
BOOL Broadcast = true;
if (WSAStartup(0x202,&wsaData) != 0) {
WSACleanup();
throw Exception("WinSock init failed.");
}
__try {
S = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (S == INVALID_SOCKET) throw Exception("Can not create socket.");
local.sin_family = AF_INET;
local.sin_port = htons(5555);
local.sin_addr.s_addr = htonl (INADDR_ANY);
bind(S, (struct sockaddr*)&local, sizeof(local));
local.sin_addr.s_addr = htonl (INADDR_BROADCAST);
setsockopt(S, SOL_SOCKET, SO_BROADCAST, (char *) &Broadcast, sizeof(Broadcast));
i = 1000;
setsockopt (S, SOL_SOCKET, SO_RCVTIMEO, (char *)&i, sizeof(i));
i = 1000;
setsockopt (S, SOL_SOCKET, SO_SNDTIMEO, (char *)&i, sizeof(i));
to.sin_family = AF_INET;
to.sin_addr.s_addr = htonl (INADDR_BROADCAST); //INADDR_BROADCAST - 1; //inet_addr("255.255.255.255");
to.sin_port = htons(5002);
sendto(S, String1, sizeof(String1), 0, (struct sockaddr FAR *)&to, sizeof(to));
T = time(NULL);
do {
fromlen = sizeof (from);
Ready2 = recvfrom(S, buf, sizeof(buf), 0, (struct sockaddr*)&from, &fromlen);
if (Ready2 != -1) {
}
} while (time(NULL) - T < 1);
closesocket(S);
}
__finally {
WSACleanup();
}